检查非对称回文

时间:2019-10-16 02:49:36

标签: c

我已经为myprogramminglab分配编写了一个程序,该程序应该接受字符串输入,检查其回文,然后输出结果。

除了一项测试之外,我所拥有的一切都在起作用。 “一个人计划一个巴拿马运河”是一个回文,但我的计划却并非如此。我认为这一定是因为程序将第二个空格与“巴拿马”中的“ m”进行比较。

在另一面,“可能是我看见了厄尔巴岛”被认为是回文症,但是我想这是因为它是对称的,并且在左侧跳过白色空间与在跳过白色的同时发生右边的空间。

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

int is_not_alnum(char c);
int testPalindrome(const char string[], int begin, int end);


int main (void)
{
    int n;
    char temp;


    printf("Enter the size of your string: ");

    scanf("%d" , &n);

    char string[n];

    printf("Enter your string to check if it is a palindrome: ");
    scanf("%c",&temp);
    scanf("%[^\n]" , string);

    if(testPalindrome(string, 0 , n - 1))
        printf("\"%s\" is a Palindrome.\n" , string);
    else
        printf("\"%s\" is not a Palindrome.\n" , string);


    //puts("");

    return(0);
}

//program only needs to worry about lowercase and 0-9 alphanumeric
int is_not_alnum(char c)
{
    if( ((c >= 'a') && (c <= 'Z')) || ((c >= '0') && (c <= '9')) )
        return(0);
    else
        return(1);
}

int testPalindrome(const char string[], int begin, int end)
{
    while (begin <= end)
    {
    if(is_not_alnum(string[begin]))
        begin++;
    if(is_not_alnum(string[end]))
        end--;

    if(string[begin] == string[end])
    {
        return(testPalindrome(string , begin++ , end--));
        return(1);
    }
    else
        return(0);
    }
}

1 个答案:

答案 0 :(得分:1)

您正在检查大写字符'Z',它应该是:

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

int is_not_alnum(char c);
int testPalindrome(const char string[], int begin, int end);


int main (void)
{
    int n;
    char temp;


    printf("Enter the size of your string: ");

    scanf("%d" , &n);

    char string[n];

    printf("Enter your string to check if it is a palindrome: ");
    scanf("%c",&temp);
    scanf("%[^\n]" , string);

    if(testPalindrome(string, 0 , n - 1))
        printf("\"%s\" is a Palindrome.\n" , string);
    else
        printf("\"%s\" is not a Palindrome.\n" , string);


    //puts("");

    return(0);
}

//program only needs to worry about lowercase and 0-9 alphanumeric
int is_not_alnum(char c)
{
    if( ((c >= 'a') && (c <= 'z')) || ((c >= '0') && (c <= '9')) )
        return(0);
    else
        return(1);
}

int testPalindrome(const char string[], int begin, int end)
{
    if (begin <= end)
       return(1);

    if(is_not_alnum(string[begin]))
        begin++;
    if(is_not_alnum(string[end]))
        end--;

    if(string[begin] == string[end])
    {
        return(testPalindrome(string , begin++ , end--));
    }
    else
        return(0);

}