gpt4 book ai didi

c++ - remove_if 字符串中的最后一个字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:20 25 4
gpt4 key购买 nike

我想删除按引用传递的字符串中的第一个和最后一个括号。不幸的是,我很难有条件地删除第一个和最后一个元素。我不明白为什么 remove_if 不能像我期望的那样使用迭代器。

Demo

#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

最佳答案

如果 remove_if 返回 end 迭代器,那么您将尝试删除不存在的元素。您应该在两个地方使用 erase 版本作为范围:

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), str.begin() + 1);
}
if (!str.empty())
{
str.erase(std::remove_if(str.end()-1, str.end(), detect_bracket), str.end());
}
}

关于c++ - remove_if 字符串中的最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36739817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com