2017-03-28 14 views
-4

私たちは私が個人的に好まない再帰関数になっていますが、それを使う必要があります。次のコードは、文字列入力 's'が回文型かどうかをチェックするためのコードです。C++再帰的なブール・ペインドロム(文字列s)

bool palindrome(string s) 
{ 
int len = s.length(); 
char start = s.at(0); 
char last = s.at(0); 

if(len>1) 
{ 
    last = s.at(len); 
} 

if(start == last && len<=2) 
{ 
    return true; 
} 
else if(start != last) 
{ 
    return false; 
} 
else 
{ 
    s = s.substr(1, s.size() - 2); 
    return palindrome(s); 
} 
} 

はこれを実行すると、文字列を入力した後、私は「のstd :: out_of_range」ランタイムエラーを取得し、私は私が台無しよどこか分かりません。私は再帰関数やC++にはまったく新しいので、どんな助けも素晴らしいだろう。

私が提供していない追加情報が必要な場合は教えてください。

注:bool関数を使用する必要があり、関数に入力した文字列を呼び出すことしかできません。

+2

でなければなりません。 'last = s.at(len);':sが5文字の場合、lenは5ですが、 's.at(5)'は存在しないのでbarfになります。再帰はあなたの問題の中では最小です。 0ベースの配列インデックス作成の基本を得る必要があります。 –

+1

これを念頭に置いてください:**エラーは読まれました**。 エラーには、このエラーが発生した行が含まれています。そうでない場合は、これを表示するデバッグツールを使用して実行します。 存在しない配列/文字列内の位置にアクセスしようとすると、範囲外のエラーがスローされます。 手作業でコードを処理し、次にエラーが発生する可能性があります。 –

+0

"私たちは個人的に好きではない再帰関数になっています"再帰関数なしでは解決できない状況がほとんどありません –

答えて

0

last = s.at(len);

これは、再帰とは何の関係もありません

last = s.at(len-1);

0

文字列の長さがlenの場合、その文字の位置は0..len-1になります。そのため、エラーが発生するのはlast = s.at(len)です。

関連する問題