在此回文字符串忽略标点符号的检查代码中出现错误

时间:2019-01-18 10:08:52

标签: c palindrome

我正在编写用于检查字符串是否为回文符的代码。我想忽略空格和标点符号或任何其他非字母字符。 根据我的代码,这基本上意味着“夫人'I Imadam”也应该是回文。 但没有得到合适的结果。

#include <stdio.h>
#include <stdlib.h>
void chkpalindrome(char []);
int main()
{
    char s[50];
    gets(s);
    chkpalindrome(s);
    return 0;
}
void chkpalindrome(char a[50])
{
    int i=0;
    int j=0;
    int flag=1;
    while(a[j+1]!='\0') //so that 'j' should point to the last index                         of string
    {
        j=j+1;
    }
    while((i!=j)&&(i!=(j+1)))
    {
        if((a[i]<'A')||('Z'<a[i]<'a')||(a[i]>'z'))
        { 
            i=i+1; 
        }
        else if((a[j]<'A')||('Z'<a[j]<'a')||(a[j]>'z'))
        {
            j=j-1;
        }
        else
        {
        if(a[i]!=a[j])
        {
            flag=0;
            break;
        }
        else
        {
            i=i+1;
            j=j-1;
        }
        }
    }
    if(flag==1)
    {
        printf("IT IS A PALINDROME");
    }
    else
    {
        printf("IT IS NOT A PALINDROME");
    }
}

预期结果-夫人I'Imadam-这是一个传闻 evee-它不是回文 但是实际结果却是回文报应的每一个字符串

1 个答案:

答案 0 :(得分:1)

90<a[i]<97表单被解释为(90<a[i])<97,所以这当然不是您所期望的

必须为(90<a[i]) && (a[i]<97)

您遇到过几次该错误

正如在评论中所说,使用像'a'这样的char而不是代码


而不是做

while(a[j+1]!='\0') //so that 'j' should point to the last index                         of string
{
    j=j+1;
}

我建议您使用 strlen