【问题标题】:How to append many string to one string separated by comma? [duplicate]如何将多个字符串附加到一个以逗号分隔的字符串? [复制]
【发布时间】:2014-06-13 01:17:55
【问题描述】:

我有以下清单:

vector<string> mylist;

我想创建一个新字符串,其中 mylist 中的所有字符串用逗号分隔,多年来我一直在编写丑陋的代码来检查我是否在向量中的最后一个字符串中,以了解我是否应该添加逗号与否。

代码看起来像这样:

for(unsigned int i=0;i<mylist.size(); i++)
{
    outstring+=mylist[i];
    if(i<mylist.size()-1) // Avoiding the last comma
    {
        outstring+=",";
    }
}

是否有避免 if 语句的技巧,也许是一些使用 STL 的算法/迭代器技巧?

谢谢

【问题讨论】:

  • 那个解决方案有什么问题?你有一个“额外的”if。那又怎样?
  • 我的(非 C++)方法是 set outstring 到第一个项目,并在循环中添加逗号 + 下一个项目,从1.
  • @Jongware 你还需要一个if 来检查if (mylist.size()&gt;0)。 :P
  • @herohuyongtao:确实如此。此外,连接字符串很容易。如果“复制”运算符需要更多工作,插入if 会容易得多(然后我宁愿使用if (!i) continue)。

标签: c++ string stl


【解决方案1】:

使用boost::algorithm::join():

#include <boost/algorithm/string/join.hpp>
...
string outstring = boost::algorithm::join(mylist, ",");

或者,你可以使用(实际上很丑):

stringstream  s;
copy(mylist.begin(), mylist.end(), ostream_iterator<string>(s, ","));
string outstring = s.str();  // still with the trailing delimiter ","
outstring.pop_back();        // pop back the last ","

【讨论】:

    【解决方案2】:

    去掉循环外的最后一个逗号怎么样?类似于以下内容(感谢@herohuyongtao 提出完美的string 成员函数!)

    for( size_t i = 0; i < mylist.size(); ++i ) {
        outstring += mylist[i];
        outstring += ",";
    }
    
    outstring.pop_back();
    

    【讨论】:

    • 其实最后一步只需要outstring.pop_back();即可。
    • @herohuyongtao:是的,这更简单,谢谢,我已经更新了答案。
    • 我也不知道字符串有一个 pop_back 成员函数。不错。
    • 哦,对了,如果 mylist 是空的怎么办?
    • @Veritas 是的,您还需要一个 if 来实现这一点。 :P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2021-10-10
    • 2011-10-05
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多