2

我正在尝试实现一个函数来检查一个单词是否是回文 下面是我尝试使用的代码。该代码显然适用于一个字母的单词以及不以相同字母开头和结尾的单词。它在其他任何事情上都失败了。请帮忙

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;
}

这是 tis 函数调用的主要函数 http://csel.cs.colorado.edu/%7Eekwhite/CSCI2270Fall2011/recursion_lab/palindrome.cxx

4

5 回答 5

7

start++递增 [local] 变量start,并计算为值。您想要评估新值,并且根本不需要更改局部变量。

所以start+1, end-1改为写,然后考虑你的字符串有偶数个字符的情况,因为那里还有另一个问题。

于 2011-10-26T01:04:24.440 回答
2

几件事:

您不需要使用前缀递增/递减运算符吗?

return is_palindrome(++start,--end, str);

此外,您需要使测试开始 >= 结束,以便它可以处理偶数个字符。

于 2011-10-26T01:04:24.023 回答
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;
}
于 2015-07-04T17:31:30.833 回答
0

试试这个,不确定它是否 100% 有效,但对我来说它有效:

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;
      }

}
于 2017-08-14T07:07:49.677 回答
-1

递归调用 is palindrome 函数来检查字符串是否为回文。 bool is_palindrome(int start, int end, const string& str) start 和 end 变量用于控制回文的匹配过程。在每次匹配之后,使用递归格式给出下一次迭代

于 2017-08-14T10:31:29.880 回答