1

我试图编写程序来测试一个字符串是否是回文,但我总是得到输出,因为它不是一个。我的代码有什么问题?

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

int is_palindrome(int start, int end, char *str)
{
    if (str[start] != str[end])
        return 0;
    else if (start == end)
        return 1;
    else
        return is_palindrome(++start, --end, str);

    return 0;

}
int main()
{
    char str[20];
    int length,start=0,end=length-1;
    int result;
    printf("Enter the String.\n");
    fgets( str, sizeof( str ), stdin );
    length = strlen(str);

    if(is_palindrome(start,end,str))
        printf("It's a palindrome!\n");
    else
        printf("It's not a palindrome! \n");
    return 0;
}
4

4 回答 4

3

什么时候++start--end对方擦肩而过?

else if (start == end)

应该是>=

于 2013-04-17T14:29:38.460 回答
1

你有两个主要问题,

1)您在没有先初始化的情况下end使用初始化:lengthlength

length = strlen(str);
/* initialize end here */

2)您没有考虑从以下字符串末尾获得的换行符fgets

end = length - 2; /* don't include the newline */
于 2013-04-17T14:37:07.923 回答
0

在这个is_palindrome()函数中你必须检查它,否则它对回文词的偶数字符不起作用

if(start>end)
    return 1;
于 2016-06-04T10:17:39.053 回答
0

if(start==end)有逻辑错误相符。

这是由最后一次递归调用引起的,其中 last 和 end 的值将始终相同,即它们都将位于数组的中心。因此,函数is_palindrome()将始终返回1,输出将始终为It's a palindrome!

于 2017-04-03T17:31:13.403 回答