В этой программе у меня есть строка, которую я передаю в качестве параметра функции. Я хочу, чтобы функция удаляла все соседние буквы из строки, содержащей только буквы от 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;
}
Ваш return
находится внутри цикла — цикл будет выполняться только для первого символа, а затем возвращается.
После первого erase(i)
все символы сдвигаются влево и меняются индексы. Вместо звонка s.erase(i+1)
ты должен позвонить снова s.erase(i)
чтобы не пытаться получить доступ за концом строки:
s.erase(i);
s.erase(i);
или просто s.erase(i, 2)
,