我希望能够删除通过引用传递的字符串中的第一个和最后一个括号。不幸的是,我在有条件地删除第一个和最后一个元素方面遇到了困难。
我无法理解为什么使用迭代器时remove_if
不能按照我的预期工作。
#include <iostream>
#include <algorithm>
using namespace std;
void print_wo_brackets(string& str){
auto detect_bracket = [](char x){ return(')' == x || '(' == x);};
if (!str.empty())
{
str.erase(std::remove_if(str.begin(), str.begin() + 1, detect_bracket));
}
if (!str.empty())
{
str.erase(std::remove_if(str.end()-1, str.end(), detect_bracket));
}
}
int main()
{
string str = "abc)";
cout << str << endl;
print_wo_brackets(str);
cout << str << endl;
string str2 = "(abc";
cout << str2 << endl;
print_wo_brackets(str2);
cout << str2 << endl;
return 0;
}
输出
abc)
ac <- HERE I expect abc
(abc
abc