【问题标题】:C++/boost: apply a prefix to a string listC ++ / boost:将前缀应用于字符串列表
【发布时间】:2017-04-14 21:18:39
【问题描述】:

我想为字符串列表添加一个简单的前缀:

Input: "a, b, c, d, e"
Output: ":a, :b, :c, :d, :e"

是否已经为此类操作实现了任何 boost 库?为字符串序列添加前缀甚至应用boost::format 操作?

我搜索了boost::algorithm::string 库,但一无所获。当然,我可以简单地使用std::for_each 或任何其他方法来解决它,但我想知道是否已经制作了任何东西。

【问题讨论】:

  • 这些字符串是如何存储的?它是一个列表?
  • std::vector<std::string> 实际上,虽然 boost 和 std 只考虑范围或迭代器,所以我认为具体的容器在这里并不重要。
  • 您的输入是像您的示例中那样的一个字符串还是一个字符串容器?
  • std::regex_replace?
  • @mkaes a std::vector<std::string>

标签: c++ string boost prefix


【解决方案1】:

所以我假设你有一个包含字符串的容器,并且每个字符串都应该加上前缀: 可能是这样的:

std::for_each(v.begin(), v.end(), [](auto& s){ s.insert(0, ":");});

或者如果 c++11 没有这样的选项:

string& (string::*FP)(size_t pos, const string& str) = &string::insert;
std::for_each(v.begin(), v.end(), std::bind(FP, std::placeholders::_1, 0, ":"));

这将为容器中的每个元素添加 : 前缀。

至少会在您的示例中产生输出的完整示例如下所示:

int main() {
    std::vector<std::string> v;
    v.push_back("a");
    v.push_back("b");
    v.push_back("c");
    v.push_back("d");
    v.push_back("e");
    std::for_each(v.begin(), v.end(), [](auto& s){ s.insert(0, ":");});    
    for(const auto& s : v)
    {
        std::cout << s << ", ";
    }
    return 0;
}

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多