string — завершить вызов после выброса экземпляра — ошибка C ++?

В этой программе у меня есть строка, которую я передаю в качестве параметра функции. Я хочу, чтобы функция удаляла все соседние буквы из строки, содержащей только буквы от 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;

}

-4

Решение

Ваш return находится внутри цикла — цикл будет выполняться только для первого символа, а затем возвращается.

0

Другие решения

После первого erase(i) все символы сдвигаются влево и меняются индексы. Вместо звонка s.erase(i+1) ты должен позвонить снова s.erase(i) чтобы не пытаться получить доступ за концом строки:

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

или просто s.erase(i, 2),

0

По вопросам рекламы [email protected]