2016-07-24 6 views
0

C++で同じ2つの連続する文字を削除するコードを記述しています。例えば :デモコードはout_of_range例外をスローしていますが、私はなぜか分かりません

 
- aa -> empty string 
- aabb -> empty string 
- abba -> aa -> empty string (as removal of 'bb' makes it 'aa') 
- abab -> abab (not possible) 
#include <iostream> 
using namespace std; 

int main() 
{ 
    int i; 
    string s; 
    bool match = true; 
    getline(cin, s); 
    while (match) { 
     match = false; 
     for (i = 0; i < s.length() - 1; i++) { 
      if (s.at(i) == s.at(i+1)) { 
       s.erase(i,2); 
       match = true; 
      } 
     } 
    } 
    if (s == "") { 
     cout << "Empty!"; 
    } 
    else { 
     cout << s; 
    } 
    return 0; 
} 
+0

どのような文字列でエラーが発生していますか?エラーの内容は何ですか? –

+0

または単に 'std :: regex_replace(s、std :: regex(")。)、 ""); ' – DimChtz

答えて

3

s.length()は符号なしで、s.length()s.length()がゼロの場合は0

あなたはこのように減算を実行する前に確認すべきであるときs.length() - 1は非常に大きなものとなります

for (i = 0; s.length() > 0 && i < s.length() - 1; i++) { 
+2

より簡単な方法は-1を反対側に移動することです: 'i + 1 Aganju

関連する問題