给出一个字符串向量[“one”,“two”,“three”]。
问题>如何将其转换为“一二三”?
我知道用循环做手动的方法,并想知道是否 STL功能有一种更简单的方法。
//基于我应该使用accumulate
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
struct BindTwoStrings
{
string operator()(const string& s1, const string& s2) const {
return s1.empty() ? s2 : s1 + " " + s2;
}
};
int main()
{
vector<string> vecString {"one", "two", "three"};
string ret2;
ret2 = accumulate(vecString.begin(), vecString.end(), ret2,
[] (const string& s1, const string& s2) -> string {
return s1.empty() ? s2 : s1 + " " + s2; });
cout << "ret2:\"" << ret2 << "\"" << endl;
string ret;
ret = accumulate(vecString.begin(), vecString.end(), ret, BindTwoStrings());
cout << "ret:\"" << ret << "\"" << endl;
return 0;
}
答案 0 :(得分:2)
您可以使用std::accumulate()
:
std::string concat = std::accumulate(std::begin(array) + 1, std::end(array), array[0],
[](std::string s0, std::string const& s1) { return s0 += " " + s1; });
答案 1 :(得分:2)
使用std::stringstream
,您可以这样做:
std::stringstream ss;
const int v_size = v.size();
for(size_t i = 0; i < v_size; ++i) // v is your vector of string
{
if(i != 0)
ss << " ";
ss << v[i];
}
std::string s = ss.str();
答案 2 :(得分:1)
您可以使用std::ostream_iterator
。
std::vector< std::string > vs{ "one", "two", "three" };
std::ostringstream result_stream;
std::ostream_iterator< std::string > oit( result_stream, " " );
std::copy( vs.begin(), vs.end(), oit );
std::string result = result_stream.str();
如果要将结果放在字符串中,请使用std::ostringstream
作为输出迭代器。