2014-01-08 18 views
3

給定字符串[「one」,「two」,「three」]的向量。如何使用C++中的STL將字符串與空格連接成一個字符串

問題>如何將其轉換爲「一二三」?

我知道手動方式來做一個循環,並想知道 是否有一個更簡單的方法與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

或'std :: stringstream'與'std :: ostream_iterator'和'std :: copy'。 – n0rd

+4

[連接字符串](http://stackoverflow.com/questions/720344/concatenating-strings) –

回答

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; }); 
+0

@ P0W:這將有一個領先的空間,然後是一串不分隔的字符串... –

+0

@DietmarKühl,啊,對不起,它似乎並沒有給我一開始的空間,現在我覺得很奇怪,我想到了。 – chris

+0

@DietmarKühl啊,是啊,積累總是讓我困惑 – P0W

1

隨着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(); 
0

您可以使用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的輸出迭代器。

+0

'vs'爲空時,需要修剪尾部空間 – P0W

+0

@ P0W如何指定對別人問題的要求?無論如何,只需參考重複問答的答案,如果結果是* not * empty,則刪除尾部空格。 – Potatoswatter

相關問題