c语言回文代码片段,要求定义并调用函数 mirror(p)判断字符串 p 是否为“回文”,调用的函数错在哪儿了~

要求定义并调用函数 mirror(p)判断字符串 p 是否为“回文”,如果 p 是回文字符串,返回1,否则,返回0,函数形参 p 的类型是字符指针,函数类型是 int。
int mirror(char *p)
{int len=0;char *t=p;
while(*(p++))len++;
t=p+len-1;
while(( *p==*t )&&(t>=p)){
p++;t--;
}
if(t<p)
return 1;
else
return 0;}
运行出来abbcbba是回文,,但是为什么abba就说是no呢

我对你的函数做了修改结果可以正确运行,修改如下
int mirror(char *p)
{
int len=0;char *t=p;
while(*(t++))len++; //变量len 其实可以不要
t=t-2;
while(( *p==*t ) && (t>=p) ) //
{
p++;t--;
}
if(t<p) //字符个数为奇数数个,且字符串为回文时修改指针
{
--p;
++t;
}
if(t==p || *p==*t) //
return 1;
else
return 0;
}
/*我想你的错误在于忽略考虑回文的字符串个数是偶数还是奇数,以及忽略了字符串结尾还有一个终止字符\0,
应该仔细考虑你的循环对指针的影响*/
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-30
#include <stdio.h>
#include <string.h>
int mirror(char *p);
main()
{
printf("%d\n", mirror("abbcbba"));
printf("%d\n", mirror("abba"));
}
int mirror(char *p)
{
char *t = p + strlen(p) - 1;
while(*p == *t && t >= p)
{
p++;
t--;
}
return t >= p ? 1 : 0;
}

你的错误是为了测得字符串长度,把P移动到了字符串最后,然后还把t在p往后加了那么长,所以,你测得已经不是你原来的字符串了。strlen是获取字符串长度,不包含\0

本回答被网友采纳
第2个回答  2013-04-30
if(t<p) return 1;
改为if(t<=p) return 1;
因为如果字符个数为偶数,则相等时为回文。
相似回答