这是我的第一个问题,如果我这样做违反了任何规则,我很抱歉。无论如何,我的问题是关于字符串的。我如何删除括号以及字符串中的文本?例如..我有一个字符串“示例(stuff)example”。我希望每次都能去掉括号和里面的字符,是不是这样“(stuff)示例示例”或此“示例示例(东西)"。我也是c++的新手,正在使用replit作为我的ide,它不包含自动填充feautre,所以我不知道我使用的是什么函数,使这项任务变得困难。如果您还可以为我指出关于std::方法的方向,请让我知道。
我真的是新的编程,通常得到帮助时,编写代码,现在做独立的工作,而从大学休息。
#include <string>
std::string remove_parentheses(const std::string &str) {
int i = 0;
while(i < str.length()) {
if(str[i] == '(' || str[i] == ')' ) {
str.erase(i,1);
} else{i++}
}
return str; // your code here
}
int main() {
std::string str = "Computer systems";
remove_parentheses(str);
return 0;
}
上面写着..
错误:没有匹配的成员函数调用'erase' str.erase(i,1);
输入“计算机(计算机系统)系统”
输出“计算机系统”
这不是正确的擦除方法吗?我找不到字符串或std::的函数列表函数.谢谢你的帮助!
3条答案
按热度按时间ozxc1zmp1#
你不能从
const
引用中删除内容。const
修饰符是专门设计来禁止你修改引用对象的。如果你想在原处修改它,取一个非常数引用。如果你想创建一个新的字符串,并且修改不受影响,那么就按值获取字符串(当你调用函数时会产生一个副本),然后返回新的字符串。
vs3odd8k2#
Silvio Mayolo答案的补充,但我强烈建议输出一个新的字符串,而不是在原处修改现有的字符串。我们可以使用一个变量来跟踪嵌套括号的级别,使用一个
std::ostringstream
来高效地构建一个新的字符串,去掉括号及其内容。从rturrado的回答中得到一些启发,但跳过C20,依靠C17的特性,这可以用于使用
std::copy_if
。a7qyws3x3#
你也可以开始习惯STL算法。从C++20开始,你可以使用
std::string::erase_if
,它基本上会:Demo(https://godbolt.org/z/Gzzqr7778)