输入一字符串以回车符为结束判断它是不是回文 一道C语言题 谢谢

2024年11月16日 16:26
有2个网友回答
网友(1):

#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;
}

网友(2):

用两头凑法,找到字符串的最后一个字符,与第一个字符比较。然后各自向中间移动,逐个比较。如果比较中出现不同,则不是回文。当二者相遇时,一直都相同,则字符串为回文。

参考代码如下:
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;
}