我尝试编写用于测试字符串的程序,如果它是一个回文或不是,但我总是得到输出,因为它不是一个。我的代码出了什么问题?
#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;
}
答案 0 :(得分:3)
当++start
和--end
相互传递时会发生什么?
else if (start == end)
应为>=
。
答案 1 :(得分:1)
您有两个主要问题,
1)您正在使用end
初始化length
,而无需先初始化length
:
length = strlen(str);
/* initialize end here */
2)您没有考虑fgets
字符串末尾的换行符:
end = length - 2; /* don't include the newline */
答案 2 :(得分:0)
在此is_palindrome()
函数中,您必须检查它,否则它将不适用于回文词的偶数字符
if(start>end)
return 1;
答案 3 :(得分:0)
在if(start==end)
的行上有逻辑错误。
这是由最后一次递归调用引起的,其中last和end的值总是相同的,即它们都将位于数组的中心。因此,函数is_palindrome()
将始终返回1
,输出将始终为It's a palindrome!