【发布时间】:2017-06-15 18:58:44
【问题描述】:
我正在尝试从"helloworld" 等字符串中删除连续的重复字符,并删除所有出现的重复字符。在这种情况下,它是'l',所以新字符串应该是"heoword"。我写了这样的代码:
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;
int main() {
string s = "helloworld";
for (int i = 0; i < s.length() - 1; i++) {
if (s[i] == s[i+1]) {
s.erase(remove(s.begin(), s.end(), s[i]), s.end()); // PROBLEM
cout << s << endl; // printing `heowrld`, instead of `heoword`
}
}
return 0;
}
除非我像(char)s[i] 一样投射s[i],否则上面的代码不起作用。我为字符串查找了运算符[],它返回了对位置字符的引用。 remove 方法还接受 const T& val 作为要替换字符的参数。既然它们都是同一类型,为什么我不能把s[i] 作为remove 方法的参数?
附言这不是作业问题。通过在remove 中转换s[i],我可以获得正确的输出,但我想知道为什么我需要转换s[i]。
【问题讨论】:
-
确切的编译器错误是什么?
-
这可能是家庭作业,因此被导师法令禁止,但take a look at
std::unique -
@NathanOliver 我没有收到任何错误,但输出是
heowrld而不是heoword。 -
无法复制编译器错误。 ideone.com/VjKZCM.
标签: c++ pointers casting reference