Can';我不懂这个程序逻辑 #包括 无效页(字符s[]){ int i,strlen=0,j,k; 对于(i=0;s[i]!='\0';i++) strlen=i; 对于(j=0,(k=(strlen-1));j1) printf(“非回文”); else如果(k==j | |(k-j)==1) printf(“是回文”); } int main(){ 字符行[100]; printf(“输入字符串:”); scanf(“%s\n”,&line); palind(行); }
嘿,我很难理解Can';我不懂这个程序逻辑 #包括 无效页(字符s[]){ int i,strlen=0,j,k; 对于(i=0;s[i]!='\0';i++) strlen=i; 对于(j=0,(k=(strlen-1));j1) printf(“非回文”); else如果(k==j | |(k-j)==1) printf(“是回文”); } int main(){ 字符行[100]; printf(“输入字符串:”); scanf(“%s\n”,&line); palind(行); },c,C,嘿,我很难理解palind()函数的逻辑,比如在for循环的第一次迭代中strlen是0,所以k=-1n然后j回答关于第一个for循环的具体问题。守则: #include <stdio.h> void palind(char s[]){ int i,strlen=0,j,k; for(i=0;s[i]!='\0';i++) strlen=i; for(j=0,(k=(strlen-1));j<=k;j++,k--){
palind()
函数的逻辑,比如在for循环的第一次迭代中strlen
是0,所以k=-1
n然后j回答关于第一个for循环的具体问题。守则:
#include <stdio.h>
void palind(char s[]){
int i,strlen=0,j,k;
for(i=0;s[i]!='\0';i++)
strlen=i;
for(j=0,(k=(strlen-1));j<=k;j++,k--){
if(s[i]!=s[j])
break;
}
if((k-j)>1)
printf("not a palindrome");
else if(k==j||(k-j)==1)
printf("yeah a palindrome");
}
int main(){
char line[100];
printf("enter the string: ");
scanf("%s\n",&line);
palind(line);
}
计算字符串的长度。strlen在此循环之前设置为0,因为它可能是空字符串
所以第二个循环:
for (i = 0; s[i] != '\0'; i++)
strlen = i;
for(j=0,(k=(strlen-1));j以下for
循环不正确
for (j = 0, (k = (strlen - 1)); j <= k; j++, k--) {
if (s[k] != s[j])
break;
}
for(j=0,(k=(strlen-1));jLoop 1--
环路2--
for(j=0,(k=(strlen-1));jI's to Admin这是一个人类理解的糟糕代码。IMO
循环的第二个感到困惑。是的,这就是我解释这两个的原因。我的第一个注释比它早了6分钟。没关系,现在答案很好。更正:循环计算字符串的长度-1。@juanchopanza真的吗?它会在空字符上停止,而空字符是字符串末尾的1。
for(j=0,(k=(strlen-1));j<=k;j++,k--){
if(s[i]!=s[j])
break;
}
for(j=0,(k=(strlen-1));j<=k;j++,k--){
if(s[k]!=s[j])
// ^^ k, not i
break;
}
for(i=0;s[i]!='\0';i++)
strlen=i;
for(j=0,(k=(strlen-1));j<=k;j++,k--){
if(s[i]!=s[j])
break;
}