получить ошибку в этом коде проверки строки палиндрома, пренебрегая знаками препинания - PullRequest
0 голосов
/ 18 января 2019

Я пишу код для проверки, является ли строка палиндромом или нет. Я хочу пренебречь пробелами и знаками препинания или любым другим не алфавитным символом. что по сути означает «мадам я идам» должно быть палиндромом, в соответствии с моим кодексом. Но не получить соответствующий результат.

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

Ожидаемые результаты - мадам, я Идам, это палиндром. Ева - это не палиндром Но фактические результаты оказываются каждой строкой как палиндром

1 Ответ

0 голосов
/ 18 января 2019

Форма 90<a[i]<97 интерпретируется как (90<a[i])<97, поэтому, конечно, это не то, что вы ожидали

Должно быть (90<a[i]) && (a[i]<97)

У вас в несколько раз больше ошибка

И, как было сказано в комментариях, используйте символ "а" вместо кода


, а не

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

Я рекомендую вам использовать StrLen

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...