我正在尝试实现一个函数,它将检查单词是否为回文以下是我尝试使用的代码。代码显然适用于一个字母的单词和不以相同字母开头和结尾的单词。它失败了。请帮忙
bool is_palindrome(int start, int end, const string & str)
{
if (str[start] != str[end])
return false;
else if (start == end)
return true;
else
return is_palindrome(start++, end--, str);
return false;
}
这是函数调用的主要函数 http://csel.cs.colorado.edu/%7Eekwhite/CSCI2270Fall2011/recursion_lab/palindrome.cxx
答案 0 :(得分:7)
start++
递增[local]变量start
,并计算旧值。您想要评估新值,并且根本不需要更改局部变量。
所以改为编写start+1, end-1
,然后考虑你的字符串中包含偶数个字符的情况,因为那里有另一个问题。
答案 1 :(得分:2)
一些事情:
您是否需要使用前缀增量/减量运算符?
return is_palindrome(++start,--end, str);
此外,您需要让测试开始> =结束才能使用偶数个字符。
答案 2 :(得分:0)
应该是这样的:
bool is_palindrome(int start, int end, const string& str)
{
if (str[start] != str[end])
return false;
else if ((start == end) || (start < end))
return true;
else
return is_palindrome(++start, --end, str);
return false;
}
答案 3 :(得分:0)
Try this, not sure isit 100% working but for me it works:
bool is_palindrome(int start, int end, const string& str)
{
if (str[start] != str[end])
return false;
else if (str[start] == str[end])
{
if (start <= end)
return is_palindrome(start+1, end-1, str);
return true;
}
}
答案 4 :(得分:-1)
递归调用是回文函数来检查字符串是否是回文。 bool is_palindrome(int start,int end,const string&amp; str) start和end变量用于控制回文的匹配过程。 在每次匹配之后,使用递归格式
给出下一次迭代