如何修剪 std::string?

新手上路,请多包涵

我目前正在使用以下代码对我的程序中的所有 std::strings 进行右修剪:

 std::string s;
s.erase(s.find_last_not_of(" \n\r\t")+1);

它工作正常,但我想知道是否有一些最终情况可能会失败?

当然,欢迎使用优雅的替代方案和左修剪解决方案的答案。

原文由 Milan Babuškov 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 747
1 个回答

使用 std::find_if_not 和反向迭代器(无 +1/-1 调整)并返回修剪的空格数

// returns number of spaces removed
std::size_t RoundTrim(std::string& s)
{
    auto const beforeTrim{ s.size() };

    auto isSpace{ [](auto const& e) { return std::isspace(e); } };

    s.erase(cbegin(s), std::find_if_not(cbegin(s), cend(s), isSpace));
    s.erase(std::find_if_not(crbegin(s), crend(s), isSpace).base(), end(s));

    return beforeTrim - s.size();
};

原文由 Soup Endless 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题