猿问

解析逗号分隔的std:string

解析逗号分隔的std:string

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

我不想把它概括为解析其他任何东西。只是一个简单的逗号分隔整数字符串,如“1,1,1,1,2,1,1,1,0”。


三国纷争
浏览 2065回答 3
3回答

慕神8447489

不那么冗长的东西,用逗号隔开的东西。stringstream&nbsp;ss(&nbsp;"1,1,1,1,&nbsp;or&nbsp;something&nbsp;else&nbsp;,1,1,1,0"&nbsp;);vector<string>&nbsp;result;while(&nbsp;ss.good()&nbsp;){ &nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;substr; &nbsp;&nbsp;&nbsp;&nbsp;getline(&nbsp;ss,&nbsp;substr,&nbsp;','&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;result.push_back(&nbsp;substr&nbsp;);}

Cats萌萌

还有一种非常不同的方法:使用特殊的区域设置,将逗号作为空白:#include&nbsp;<locale>#include&nbsp;<vector>struct&nbsp;csv_reader:&nbsp;std::ctype<char>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;csv_reader():&nbsp;std::ctype<char>(get_table())&nbsp;{} &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;std::ctype_base::mask&nbsp;const*&nbsp;get_table()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;std::vector<std::ctype_base::mask>&nbsp;rc(table_size,&nbsp;std::ctype_base::mask()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rc[',']&nbsp;=&nbsp;std::ctype_base::space; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rc['\n']&nbsp;=&nbsp;std::ctype_base::space; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rc['&nbsp;']&nbsp;=&nbsp;std::ctype_base::space; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&rc[0]; &nbsp;&nbsp;&nbsp;&nbsp;}};用这个,你imbue()包含此方面的区域设置的流。一旦你这样做了,你就可以读数字,就好像逗号根本不存在一样。例如,我们将从输入中读取逗号分隔的数字,然后在标准输出中写出一行:#include&nbsp;<algorithm>#include&nbsp;<iterator>#include&nbsp;<iostream>int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;std::cin.imbue(std::locale(std::locale(),&nbsp;new&nbsp;csv_reader())); &nbsp;&nbsp;&nbsp;&nbsp;std::copy(std::istream_iterator<int>(std::cin),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::istream_iterator<int>(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::ostream_iterator<int>(std::cout,&nbsp;"\n")); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}
随时随地看视频慕课网APP
我要回答