我有以下列表:
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的一些算法/迭代器技巧?
由于
答案 0 :(得分:4)
使用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 ","
答案 1 :(得分:1)
如何取出循环外的最后一个逗号?类似下面的内容(感谢@herohuyongtao建议完美的string
成员函数!)
for( size_t i = 0; i < mylist.size(); ++i ) {
outstring += mylist[i];
outstring += ",";
}
outstring.pop_back();