C中一个“回文”程序,我改了一个地方,结果就不对,请高手看补充:谢谢:

来源:百度知道 编辑:UC知道 时间:2024/06/29 00:24:22
#include <stdio.h>
void palindrome(char *string);

void main ()
{char str[100],*string=str;
gets(string);
palindrome(string);
getch();
}
void palindrome(char *string)
{char *p=string,*q=string;
while(*q!='\0') q++;
q--;
while(*p==*q&&p<=q) {p++;q--;}
if(p>=q) printf("%s is palindrome.\n",string);/*我把这>=改成了==,程序运行就不对了,我想,p怎么能>q,它只能==q,我哪里理解了?谢谢!*/

else printf("%s is not palindrome.\n",string);
return;}


while(*q!='\0') q++;
q--;/*这个q--是什么意思,它最后一次不是恰好是指向最后一个非空字符吗,减一不就指向倒数第二个字符吗,我哪里理解错了?谢谢.*/

谢谢蓝,但奇数个字符==也不行啦?

while(*q!='\0')
q++;
上面的循环意思为,一直往后面找,知道遇到\0,就是字符串的结尾符,而退出循环时候,就是*q 为\0的时候
q--;
所以q--一次,就是指向最后一个字符

然后从两头开始比较
*q这时候是最后一个,*p是第一个,往中间靠近

直到两个指针相遇,如果是偶数的话,刚好相等时候退出,如果是奇数个字符,就是p>q时候时候退出了

所以条件不能改

如果回文是偶数个字符的话,一个++,一个--是碰不到一起的,所以要写>=

#include <stdio.h>
int main()
{
int i,n;
scanf("%d",&n); //N为测试次数
for(i=0;i<n;i++)
{
char a[60];
scanf("%s",a);
int num=0,j,z,x;
for(j=0;a[j];j++)
{
num++;
}
for(z=0,x=num-1;z<num,x>=0;z++,x--)
{
if(a[z]!=a[x])
break;
}
if(z==num)
printf("Yes\n");
else
printf("No\n");

}
return 0;
}