#include
#include
#include
int main()
{
char str[101],*p0,*p1,hflag;//指针分别指向字符串头尾 hflag 标识变量 1是回文 0不是
aa: memset(str,0,101);
hflag=1;
printf("输入一个100字符以内的字符串:");
scanf("%s",str);
p0=&str[0];
p1=&str[strlen(str)-1];
while(1)
{
if(*p0!=*p1)
{
hflag=0;
break;
}
if(p1==&str[0])
break;
p1--;
p0++;
}
if(hflag==1)
printf("%s是回文\n",str);
else
printf("%s不是回文\n",str);
goto aa;
return 0;
}
用两头凑法,找到字符串的最后一个字符,与第一个字符比较。然后各自向中间移动,逐个比较。如果比较中出现不同,则不是回文。当二者相遇时,一直都相同,则字符串为回文。
参考代码如下:
int huiwen(char *s)
{
char *p = s;
while(*p) p++;//找到结束符\0的位置。
p--;//\0的前一个字符,就是字符串的最后一个字符。
while(s
{
if(*s != *p) return 0;//发现不同,不是回文。
s++;
p--;//二者向中间移动。
}
return 1;//到相遇后一直相同,是回文。
}
int main()
{
char s[100];
scanf("%s",s);//输入字符串。
if(huiwen(s))//判断是否回文并输出结果。
printf("%s是回文字符串\n",s);
else
printf("%s不是回文字符串\n",s);
return 0;
}