我使用replace_if解决了一个简单的问题,但每次它都给我错误。
的问题:
在给定的字符串中删除相邻的字符并使字符串尽可能紧凑
例如: aabcc将成为b,aabbcc将变为空字符串。
int main()
{
string s;
cin>>s;
replace_if(s.begin(),s.end(),[](char l, char r){return l == r;},"");
cout << string(s.begin(),s.end());
return 0;
}
错误:
/usr/include/c++/6/bits/stl_algo.h:4280:12: note: candidate expects 3 arguments, 2 provided
solution.cc:19:51: note: candidate:
main()::<lambda(char, char)>
replace_if(s.begin(),s.end(),[](char l, char r){
答案 0 :(得分:4)
std::replace_if
对某个类型的值(在您的情况下,类型为char
)进行操作,并且可用于检查序列中的每个值,并可能将其替换为另一个值相同类型。换句话说,如果允许您将所有a
替换为b
s,但不允许删除元素或将谓词基于被检查元素本身以上。
你需要的是构图有点复杂,但可以做到,例如像这样:
auto it = s.begin();
for (;;)
{
it = std::adjacent_find(it, s.end()); // Find two adjacent same characters
if (it == s.end()) // If there are none, we're done
break;
auto next = std::find_if(it, s.end(), [it](char c) { return c != *it; }); // Find next different character
it = s.erase(it, next); // Erase all in range [it, next)
}