抛出实例后调用终止 - C ++错误?

时间:2018-01-24 16:40:56

标签: c++ string erase letters

在这个程序中,我有一个字符串,我将其作为参数传递给函数。我希望函数擦除包含仅来自a-z的字母的字符串中的所有相邻字母,始终按字母顺序排序。例如,如果我输入aaabbccd,该程序应该输出广告。我想问为什么程序停止工作?

#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<char> rez;
string reduce_string(string s)
{
    for(int i=0; i<s.length()-1; i++)
    {
        if(s[i]==s[i+1])
        {
            s[i]=s[i+1]='0';
            s.erase(i);
            s.erase(i+1);
        }

    }
    return s;
}
int main()
{

    string s;
    cin >> s;
    cout<<reduce_string(s);

    return 0;

}

2 个答案:

答案 0 :(得分:0)

你的return在循环中 - 循环只会在第一个字符上运行然后返回。

答案 1 :(得分:0)

在第一个erase(i)之后,所有字符向左移动一个并且索引发生变化。而不是调用s.erase(i+1),您必须再次调用s.erase(i),不要尝试超出字符串末尾访问:

s.erase(i);
s.erase(i);

或只是s.erase(i, 2)