从这里找不到回文

时间:2018-09-07 16:19:01

标签: c

#include <stdio.h>
#include <stdlib.h>
#include<string.h>

int main()
{
    int i,l,count=0;
    char str[100];
    printf("Enter a string\n");
    scanf("%[^\n]", str);
    l=strlen(str);
    printf("%d\n", l);
    for(i=0;i<=l/2;i++)
    {
        if(str[i]==str[l-i])
            count++;
        else
            continue;
    }
    printf("%d", count);

    if(count==l/2)
        printf("the string is pallindrome");
    else
        printf("\nNOt pallindrome");

    return 0;
}

1 个答案:

答案 0 :(得分:0)

如果我将此行添加到您的for循环中:

printf("str[i]=%.2X\tstr[l-i]=%.2X\n", str[i], str[l-i]);

使用输入racecar回文),我看到输出:

str[i]=72       str[l-i]=00
str[i]=61       str[l-i]=72
str[i]=63       str[l-i]=61
str[i]=65       str[l-i]=63

您正在将空终止符与字符串的实际内容进行比较,这是不正确的。另外,continue将结束循环的当前迭代,然后更新i keep循环,一旦遇到比较失败,这将不是您想要的。您希望在那里有一个break。更好的是,将代码包含在自己的函数中,这样您就可以在失败时返回,如下所示:

int palin(char *a, size_t len)
{
    char *p = &a[0];
    char *q = &a[len - 1];
    while(p < q)
    {
        if(*p != *q) return 0;
        p++;
        q--;
    }
    return 1;
}