C语言 判断给定字符串是否是回文

图中这样为什么不对

我猜楼主的想法是:

让数组的头和尾比较,一样了,就比较下一对,一直比较到最后,如果i=j,就说明是回文。

但是题主却没有用循环语句,按照楼主的程序就能比较两次,比较不完肯定错;而且题主找到的i,并不指向数组最后一个元素,而是指向他的结尾符号。(详情看图)

改正意见:

1. 使用循环语句,从头判断到尾。

那就要求我们给循环语句一个最长执行长度,这就要考虑两种情况,一种,数组长度为奇数,另一种,数组长度尾偶数。不同的情况我们的判决情况也不一样,必须选一个适合两种情况的判决条件,这里使用n=i/2-1,让n来作为标准。(原因看图)。(其实除了要考虑这种情况之外,还要考虑特殊情况,比如长度为1,2这样的,这种特殊情况,就是程序容易忽略,容易出错的地方。)

2. 在判断前,i-1,让i指向数组最后一个元素。

#include  <stdio.h>
int main()
{
char a[20];
gets(a);
int i,j,n;
j=i=0;
while(a[i]!='\0')i++; //此时i并不指向a的最后一个元素,而是指向它的结尾符号‘、0’ 
n=i/2-1;
i--; //让i指向a的最后一个元素 
while(j<=n)
{
if(a[i]!=a[j])break;
else {
i--;
j++;
}
}
if(j>n)printf("\n回文!");
else printf("\n不回文!");
return 0;

}

总结:编程不容易,思考需谨慎。面向过程的的编程,任何情况都要考虑出来,这样你的程序才是正确的。

追问

答主给的答案我看懂了 但是还是想问一下 为什么我写的那个只能循环两次呢 是哪里出了问题呀 非常感谢!!!

答主给的答案我看懂了 但是还是想问一下 我的答案可以改一下哪里 改成正确的么 非常感谢!!!

追答

你想要从头到尾都比较的话,那你就要有一个循环语句把比较的部分包括起来。
你的句子里的循环语句用来判断数组长度了。并不能帮助你判断。
所以你需要再使用一个while语句,把if语句包括起来,这样就可以比较好多次了。

追问

好非常感谢

好非常感谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-13
什么叫回文?
相似回答