2011-10-26 7 views
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; 
} 

はTIS関数は、物事の http://csel.cs.colorado.edu/%7Eekwhite/CSCI2270Fall2011/recursion_lab/palindrome.cxx

+1

文字列の長さが偶数の場合はどうなりますか? –

+3

++と - 演算子は、あなたが行っていると思っていることをしていません。 –

+0

"失敗"?あなたは一歩一歩進み、失敗したことを知りましたか?紙の上に?ペンで? –

答えて

7

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

代わりにstart+1, end-1と書いてください。文字列に偶数の文字が含まれている場合を考えてみましょう。

2

カップル呼び出す主な機能です助けてください?

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

また、テスト開始> = endを偶数文字で機能させる必要があります。

0

それはのようなものでなければなりません:100%作業ISITが、それは動作します私のためにわからない、これを試してみてください

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

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

} 
-1

を再帰的に呼び出すには、文字列をチェックするために回文機能である回文ですか否か。 bool is_palindrome(int start、int end、const string & str) 開始変数と終了変数は、回文の一致処理を制御するために使用されます。 それぞれの一致後、次の繰り返しは再帰形式で指定されます

関連する問題