演示代码抛出了out_of_range异常,但我不知道为什么

时间:2016-07-24 16:28:48

标签: c++ string exception indexoutofboundsexception

我用C ++编写代码来删除任何两个相同的连续字符。 例如:

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

1 个答案:

答案 0 :(得分:3)

s.length()未签名且s.length() - 1为0时s.length()会非常大。

在执行减法之前,您应该检查s.length()是否为零:

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