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

发布于 2024-11-14 09:54:25 字数 99 浏览 1 评论 0原文

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

I have a std::string that contains comma separated values, i need to store those values in some suitable container e.g. array, vector or some other container. Is there any built in function through which i could do this? Or i need to write custom code for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

朱染 2024-11-21 09:54:25

如果您愿意并且能够使用 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());

If you're willing and able to use the Boost libraries, Boost Tokenizer would work really well for this task.

That would look like:

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());
久伴你 2024-11-21 09:54:25

您基本上需要使用 , 作为分隔符来标记字符串。 这个早期的 Stackoverflow 线程将为您提供帮助。

这里是另一篇相关帖子。

You basically need to tokenize the string using , as the delimiter. This earlier Stackoverflow thread shall help you with it.

Here is another relevant post.

南城旧梦 2024-11-21 09:54:25

我认为标准库中没有任何可用的内容。我会采用类似的方法 -

  1. 使用 strtok 基于 , 定界符对字符串进行标记。
  2. 使用atoi函数将其转换为整数。
  3. push_back 向量的值。

如果您对 boost 库感到满意,请检查此线程

I don't think there is any available in the standard library. I would approach like -

  1. Tokenize the string based on , delimeter using strtok.
  2. Convert it to integer using atoi function.
  3. push_back the value to the vector.

If you are comfortable with boost library, check this thread.

递刀给你 2024-11-21 09:54:25

使用 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());

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

Using AXE parser generator you can easily parse your csv string, e.g.

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());

Disclaimer: I didn't test the code above, it might have some superficial errors.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文