为了账号安全,请及时绑定邮箱和手机立即绑定

解析逗号分隔的std:string

解析逗号分隔的std:string

C++
三国纷争 2019-06-28 10:19:29
解析逗号分隔的std:string如果我有一个包含逗号分隔的数字列表的std:string,那么解析这些数字并将它们放入整数数组的最简单方法是什么?我不想把它概括为解析其他任何东西。只是一个简单的逗号分隔整数字符串,如“1,1,1,1,2,1,1,1,0”。
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

不那么冗长的东西,用逗号隔开的东西。

stringstream ss( "1,1,1,1, or something else ,1,1,1,0" );vector<string> result;while( ss.good() ){
    string substr;
    getline( ss, substr, ',' );
    result.push_back( substr );}


查看完整回答
反对 回复 2019-06-28
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

还有一种非常不同的方法:使用特殊的区域设置,将逗号作为空白:

#include <locale>#include <vector>struct csv_reader: std::ctype<char> {
    csv_reader(): std::ctype<char>(get_table()) {}
    static std::ctype_base::mask const* get_table() {
        static std::vector<std::ctype_base::mask> rc(table_size, std::ctype_base::mask());

        rc[','] = std::ctype_base::space;
        rc['\n'] = std::ctype_base::space;
        rc[' '] = std::ctype_base::space;
        return &rc[0];
    }};

用这个,你imbue()包含此方面的区域设置的流。一旦你这样做了,你就可以读数字,就好像逗号根本不存在一样。例如,我们将从输入中读取逗号分隔的数字,然后在标准输出中写出一行:

#include <algorithm>#include <iterator>#include <iostream>int main() {
    std::cin.imbue(std::locale(std::locale(), new csv_reader()));
    std::copy(std::istream_iterator<int>(std::cin), 
              std::istream_iterator<int>(),
              std::ostream_iterator<int>(std::cout, "\n"));
    return 0;}


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 2061 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信