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

#include<stdio.h>
main()
{
int a,b=0;
char f [255];
scanf("%s",f);
for (a=0;f [a]!='\0';a++)
b++;
if(f [a++]!=f [b--])
printf ("N");
else
printf ("Y");
return 0;
}

请问上面的代码哪出错了啊
是回文输出Y
不是输出N
字符串长度小于255

#include<stdio.h>
main()
{
int a,b=0,c=0;
char f[255];
scanf("%s",f);
for (a=0;f[a]!='\0';a++)
b++;
b--;a=0;//注意数组下标的变化
while(a<=b)//要循环变化
{
if(f[a++]!=f[b--])
{printf ("N");c=1;break;}
}
if(c==0)
printf ("Y");
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-11-20
for (a=0;f [a]!='\0';a++)
b++;
这个语句执行完毕后,a=字符串长度,b也是字符串长度

main()
{
int a,b=0;
int flag = 0;
char f[255];
scanf("%s",f);
for (a=0;a<(strlen (f) - 1)/2;a++)
{
b=strlen(f)-a-1;
if(f[a]!=f[b])
{
flag = 1;
break;
}
}

if(flag != 0)
printf ("N");
else
printf ("Y");
return 0;
}
第2个回答  2008-11-20
有错,错在if(f [a++]!=f [b--]) ,其中的a不等与0.因为前面的一个循环已经是a=b.你看是不是.还有你那个if判断,不能产生循环比较,所以也是错误的.
我写了下,测试是可以的,你看看
#include<stdio.h>

void main()
{
int m=0;
char *pf,*pe;
char f[255];
printf("input a string:");
scanf("%s",f);
for(pf=f;*pf!='\0';pf++)
m++;
for(pf=f,pe=f+m-1;pe-pf>=0&&*pf==*pe;pf++,pe--);
if(pe-pf<0)
printf("the string is a palindrome!\n");
else
printf("the string is no a palindrome!\n");
}
第3个回答  2008-11-20
#include<stdio.h>
main()
{
int a,b=0;
char f [255];
scanf("%s",f);
b=strlen(f);
if(f[a++]!=f[b--])
printf ("N");
else
printf ("Y");
}
这样运行一下吧!这个题有点难度,我做不来了.
第4个回答  2008-11-20
for (a=0;f [a]!='\0';a++)
b++;

在这个语句后,a=b,都在字符数组结束的位置
应该再a=0;
然后再if(f [a++]!=f [b--]) 判断是否回文

你自己想一下
相似回答