首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >解析逗号分隔的std::string

解析逗号分隔的std::string
EN

Stack Overflow用户
提问于 2009-12-13 06:21:57
回答 17查看 335.5K关注 0票数 152

如果我有一个包含逗号分隔的数字列表的std::string,那么解析出数字并将它们放入整数数组的最简单方法是什么?

我不想将其概括为解析任何其他内容。只是一个简单的逗号分隔的整数字符串,比如"1,1,1,1,2,1,1,1,0“。

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2009-12-13 06:47:26

一次输入一个数字,检查下面的字符是否为,。如果是,则将其丢弃。

代码语言:javascript
复制
#include <vector>
#include <string>
#include <sstream>
#include <iostream>

int main()
{
    std::string str = "1,2,3,4,5,6";
    std::vector<int> vect;

    std::stringstream ss(str);

    for (int i; ss >> i;) {
        vect.push_back(i);    
        if (ss.peek() == ',')
            ss.ignore();
    }

    for (std::size_t i = 0; i < vect.size(); i++)
        std::cout << vect[i] << std::endl;
}
票数 171
EN

Stack Overflow用户

发布于 2012-06-02 19:06:38

一些不太冗长的东西,std和任何用逗号分隔的东西。

代码语言:javascript
复制
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 );
}
票数 151
EN

Stack Overflow用户

发布于 2009-12-13 12:49:50

还有另一种相当不同的方法:使用特殊的区域设置,将逗号视为空格:

代码语言:javascript
复制
#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];
    }
}; 

要使用此方法,您需要使用包含此facet的语言环境imbue()一个流。一旦你这样做了,你就可以读取数字,就好像逗号根本不存在一样。例如,我们将从输入中读取逗号分隔的数字,然后在标准输出中每行写出一个:

代码语言:javascript
复制
#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;
}
票数 67
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1894886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档