2013-12-20 47 views
1

我有一個字符串矢量,像這樣:如何在boost中使用C++連接字符串向量?

{"abc"}{"def"}{"ghi"} 

我想將它們連接成一個單一的字符串,就像一個分隔符「 - 」。

有沒有一個簡潔(漂亮)的方式做到這一點,而不使用典型的循環?我有c + + 03和提供給我。

回答

5

當然,boost提供了一個方便的算法來實現你正在嘗試做的事情。在更高級別的語言中,您可能已經發現了一個連接函數。 Boost在連接函數中提供了一個等效的算法。

#include <boost/algorithm/string/join.hpp> 
using namespace std; 

string data[] = {"abc","def","ghi"}; 
const size_t data_size = sizeof(data)/sizeof(data[0]); 
vector<string> stringVector(data, data + data_size); 
string joinedString = boost::algorithm::join(stringVector, "-"); 
+0

'boost :: as_array'可能會有幫助 – Mehrdad

+1

另外'const st ring [] data'對我來說看起來不像是有效的C++。 – Mehrdad

+0

@Mehrdad我刪除了const。現在有效。 –

1

僅供參考,目前的std::join的建議,你可以檢查出here

但既然你有可用的提升,你可以使用boost::algorithm::join,這需要串序列和分離器,像這樣:

#include <iostream> 
#include <string> 
#include <vector> 

#include <boost/algorithm/string/join.hpp> 

int main() { 
    std::vector<std::string> words; 
    words.push_back("abc"); 
    words.push_back("def"); 
    words.push_back("ghi"); 
    std::string result = boost::algorithm::join(words, "-"); 
    std::cout << result << std::endl; 
} 

打印:

abc-def-ghi 
1

另一種選擇僅使用STL是:

std::ostringstream result; 
if (my_vector.size()) { 
    std::copy(my_vector.begin(), my_vector.end()-1, 
       std::ostream_iterator<string>(result, "-")); 

    result << my_vector.back(); 
} 

return result.str()