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

图中这样为什么不对... 图中这样为什么不对 展开
 我来答
爱猪猪的灰灰
2019-05-13 · 超过33用户采纳过TA的回答
知道答主
回答量:80
采纳率:80%
帮助的人:23.5万
展开全部

我猜楼主的想法是:

让数组的头和尾比较,一样了,就比较下一对,一直比较到最后,如果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;

}

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

更多追问追答
追问
答主给的答案我看懂了 但是还是想问一下 为什么我写的那个只能循环两次呢 是哪里出了问题呀 非常感谢!!!
答主给的答案我看懂了 但是还是想问一下 我的答案可以改一下哪里 改成正确的么 非常感谢!!!
老won
2019-05-13 · TA获得超过228个赞
知道小有建树答主
回答量:681
采纳率:31%
帮助的人:88.4万
展开全部
什么叫回文?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式