如果我有一个包含逗号分隔的数字列表的std::string,那么解析出数字并将它们放入整数数组的最简单方法是什么?
我不想将其概括为解析任何其他内容。只是一个简单的逗号分隔的整数字符串,比如"1,1,1,1,2,1,1,1,0“。
发布于 2009-12-13 06:47:26
一次输入一个数字,检查下面的字符是否为,
。如果是,则将其丢弃。
#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;
}
发布于 2012-06-02 19:06:38
一些不太冗长的东西,std和任何用逗号分隔的东西。
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 );
}
发布于 2009-12-13 12:49:50
还有另一种相当不同的方法:使用特殊的区域设置,将逗号视为空格:
#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()
一个流。一旦你这样做了,你就可以读取数字,就好像逗号根本不存在一样。例如,我们将从输入中读取逗号分隔的数字,然后在标准输出中每行写出一个:
#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;
}
https://stackoverflow.com/questions/1894886
复制相似问题