我有bool pal(char str[], int length)
的原型限制,我需要测试用户输入的字符串是否是回文。我的代码是:
bool pal(char str[], int length)
{
if(*str == str[length - 1])
{
pal(str+1, length-1);
}
else
{
return false
}
return true;
}
但似乎只测试第一个字符是否与最后一个字符相同。我想这是因为我的数组(起始点)没有递增但我不确定为什么。
答案 0 :(得分:4)
Here is a working version of your code
bool pal(const char* str, int length)
{
if(length <2) return true; // base case - 1 or 0 length string is a palindrome.
if((*str) == str[length - 1])
{
return pal(str+1, length-2); // -2 because 1 from front and 1 from back.
}
else
{
return false;
}
//no return here because the recursive call is returned.
}
答案 1 :(得分:4)
我想这可能是由于对if
语句的一些根深蒂固的厌恶,但如果由我来决定,我想我会编写类似这样的代码:
bool pal(char *str, size_t len) {
return len <2 || (str[0] == str[len-1] && pal(str+1, len-2));
}
答案 2 :(得分:1)
你检查第一个和最后一个字符,所以你应该将长度减少2,而不是减少1.此外,你应该返回内部朋友电话的值,而不是把它扔掉。
if(*str == str[length - 1])
{
return pal(str + 1, length - 2);
}
长度为> = 2且str不为空的附加测试也将按顺序进行。
答案 3 :(得分:1)
你的主要问题是你没有对递归电话的结果做任何事情:
if(*str == str[length - 1])
{
pal(str+1, length-1);
}
应该是:
if(*str == str[length - 1])
{
return pal(str+1, length-1);
}
您还需要检查零长度字符串或仅包含单个字符的字符串。