2

単語が回文であるかどうかを確認する関数を実装しようとしています。以下は、使用しようとしたコードです。このコードは、明らかに 1 文字の単語と、同じ文字で開始および終了しない単語に対して機能します。それ以外は失敗します。助けてください

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

4

5 に答える 5

7

start++[ローカル] 変数をインクリメントし、古いstartに評価します。新しい値に評価したいのですが、ローカル変数をまったく変更する必要はありません。

代わりに書いstart+1, end-1てから、別の問題があるため、文字列の文字数が偶数の場合を検討してください。

于 2011-10-26T01:04:24.440 に答える
2

いくつかのこと:

前置インクリメント/デクリメント演算子を使用する必要はありませんか?

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

また、偶数の文字で動作させるには、テストを start >= end にする必要があります。

于 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 に答える