如何将c ++中的字符串向量与boost连接?

时间:2013-12-20 20:53:10

标签: c++ boost

我有一个字符串向量,如下所示:

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

我希望将它们连接成一个字符串,并使用“ - ”之类的分隔符。

在不使用典型for循环的情况下,是否有简洁(漂亮)的方法?我有c ++ 03并且可以使用它。

3 个答案:

答案 0 :(得分: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, "-");

答案 1 :(得分: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

答案 2 :(得分: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()