如何使用 boost 连接 c++ 中的字符串向量

How do I concatenate a vector of strings in c++ with boost?

本文关键字:字符串 向量 c++ 何使用 boost 连接      更新时间:2023-10-16

我有一个字符串向量,像这样:

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

我想将它们连接成一个字符串,并带有类似"-"的分隔符。

有没有一种简洁(漂亮)的方法可以在不使用典型的 for 循环的情况下做到这一点?我有 c++03 和 boost 可供我使用。

当然,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的建议,你可以在这里查看。

但是由于你有可用的 boost,你可以使用 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()