如何在c ++中使用STL将字符串与空格连接成一个字符串

时间:2014-01-08 02:54:53

标签: c++ stl

给出一个字符串向量[“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;
}

3 个答案:

答案 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();

http://ideone.com/VfxWbd

如果要将结果放在字符串中,请使用std::ostringstream作为输出迭代器。