向c语言高手请教:以下回文程序错在哪里?谢谢

来源:百度知道 编辑:UC知道 时间:2024/08/23 18:00:26
题干:编写一个函数int palindrome(char *string),如果字符串string是回文,返回值为1,否则为0。“回文”指顺读、逆读都一样的字符串,例如:“12321”、“abba”。

源程序如下,请高手帮忙看看错在哪里,不胜感激!

错误结果:输入“aba”,输出不正确

#include "stdio.h"

int palindrome(char *string)
{
int i,j,flag=0;
char *str1,*str2;
str1=string;
for(i=0;*(string+i)!='\0';i++,string++);
str2=string+i-1;
for(j=0;j<i/2;j++)
{
if(*str1!=*str2)
{
flag=0;
break;
}
else
{
flag=1;
str1++;
str2--;
}
}
if(flag==1)
return 1;
else
return 0;
}
main()
{
int i;
char *string,str[100];
string=str;
gets(string);
i=palindrome(string);
printf("%d\n",i);
}
感谢各位精彩解答!str2确实不妥当,如果想先让str2指向字符串最后一个字符,然后通过str2--依次比较前后字符,请问如何修改for(i=0;*(string+i)!='\0';i++,string++); 好?谢谢!

首先你的 str2 不对, 改成下面的就可以把string反过来放到 str2 里:

for(i=0; *(string+i)!='\0'; i++)
{
*(str2+i) = *(string+strlen(string)-i-1);
}
*(str2+i) = '\0';

然后把后面的str2--; 改为 str2++; 就行了。

以下的程序也行,而且更清晰.

#include "stdio.h"
int palindrome(char *string)
{
int n=0,i,flag=1;
char *p=string;
while(*p)
{n++;
p++;
}
for(i=0;i<n/2;i++)
{
if(string[i]==string[n-i-1]);

else
{flag=0;
break;
}
return flag;
}
if(flag==1)
return 1;
else
return 0;
}
main()
{
int i;
char *string,str[100];
string=str;
gets(string);
i=palindrome(string);
printf("%d\n",i);
}

int palindrome(char *string)
{
char *stringDest;

stringDest = (char*)malloc( sizeof(char) * strlen(string) + 1 );

strcpy( stringDest, string