C ++:将CSV存储在容器中

时间:2011-06-06 05:09:30

标签: c++ stdvector

我有一个包含逗号分隔值的std::string,我需要将这些值存储在一些合适的容器中,例如数组,矢量或其他一些容器。有没有内置的功能,我可以做到这一点?或者我需要为此编写自定义代码?

4 个答案:

答案 0 :(得分:3)

如果您愿意并且能够使用Boost库,Boost Tokenizer可以很好地完成此任务。

这看起来像是:

std::string str = "some,comma,separated,words";
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
boost::char_separator<char> sep(",");
tokenizer tokens(str, sep);
std::vector<std::string> vec(tokens.begin(), tokens.end());

答案 1 :(得分:2)

您基本上需要使用,作为分隔符来标记字符串。 This早期的Stackoverflow线程会帮助你。

Here是另一个相关的帖子。

答案 2 :(得分:0)

我不认为标准库中有任何可用的内容。我会接近 -

  1. 使用,基于strtok分隔符对字符串进行标记。
  2. 使用atoi函数将其转换为整数。
  3. push_back向量的值。
  4. 如果您对增强库感到满意,check this thread

答案 3 :(得分:0)

使用AX解析器生成器,您可以轻松解析csv字符串,例如

std::string input = "aaa,bbb,ccc,ddd";
std::vector<std::string> v; // your strings get here
auto value = *(r_any() - ',') >> r_push_back(v); // rule for single value
auto csv = *(value & ',') & value & r_end(); // rule for csv string
csv(input.begin(), input.end());

免责声明:我没有测试上面的代码,可能会有一些表面错误。