我有一個字符串矢量,像這樣:如何在boost中使用C++連接字符串向量?
{"abc"}{"def"}{"ghi"}
我想將它們連接成一個單一的字符串,就像一個分隔符「 - 」。
有沒有一個簡潔(漂亮)的方式做到這一點,而不使用典型的循環?我有c + + 03和提供給我。
我有一個字符串矢量,像這樣:如何在boost中使用C++連接字符串向量?
{"abc"}{"def"}{"ghi"}
我想將它們連接成一個單一的字符串,就像一個分隔符「 - 」。
有沒有一個簡潔(漂亮)的方式做到這一點,而不使用典型的循環?我有c + + 03和提供給我。
當然,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, "-");
僅供參考,目前的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
另一種選擇僅使用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()
'boost :: as_array'可能會有幫助 – Mehrdad
另外'const st ring [] data'對我來說看起來不像是有效的C++。 – Mehrdad
@Mehrdad我刪除了const。現在有效。 –