从 std::string 中删除“换行符”的最有效方法是什么?
原文由 shergill 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您只需要删除字符串末尾的换行符:
这在 C++98 中:
if (!s.empty() && s[s.length()-1] == '\n') {
s.erase(s.length()-1);
}
…现在可以在 C++11 中这样完成:
if (!s.empty() && s.back() == '\n') {
s.pop_back();
}
(可选)将其包装在一个函数中。请注意,我在这里通过 ptr 简单地传递它,以便当您将其地址传递给函数时,它会提醒您字符串将在函数内部被 _修改_。
void remove_trailing_newline(std::string* str)
{
if (str->empty())
{
return;
}
if (str->back() == '\n')
{
str->pop_back();
}
}
// usage
std::string str = "some string\n";
remove_trailing_newline(&str);
从
std::string
中删除“换行符”的最有效方法是什么?
就 最有效 的方式而言 - 我必须加快测试/配置文件并查看。我会看看是否可以回复您,并在此处的前两个答案之间运行一些速度测试,以及像我在这里所做的 C 风格的方式: Removing elements from array in C 。我将使用 我的 nanos()
时间戳功能 进行速度测试。
原文由 Gabriel Staples 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
std::remove
的行为可能不是您所期望的。在这里 查看它的解释。