在这个程序中,我有一个字符串,我将其作为参数传递给函数。我希望函数擦除包含仅来自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;
}
答案 0 :(得分:0)
你的return
在循环中 - 循环只会在第一个字符上运行然后返回。
答案 1 :(得分:0)
在第一个erase(i)
之后,所有字符向左移动一个并且索引发生变化。而不是调用s.erase(i+1)
,您必须再次调用s.erase(i)
,不要尝试超出字符串末尾访问:
s.erase(i);
s.erase(i);
或只是s.erase(i, 2)
。