如何快速提取这三个数字?

时间:2011-03-30 16:27:08

标签: c++ string parsing stl

我有一个std::string,其中包含3个以空格分隔的数字 例如:123334 33335 54544。如何快速提取这三个数字?

int r = ... /* 123334 */
int g = ... /* 33335 */
int b = ... /* 54544*/

3 个答案:

答案 0 :(得分:11)

最简单的方法是使用stringstream

std::string numbers = "123334 33335 54544";
std::istringstream parse(numbers);
int r, g, b;

parse >> r;
parse >> g;
parse >> b;

if (!parse)
   throw std::runtime_error("invalid string");

答案 1 :(得分:3)

创建一个stringstream对象,为其指定字符串,然后使用operator>>读取3个数字。

答案 2 :(得分:1)

另一种解决方案是。

std::string numbers = "123334 33335 54544";
std::istringstream iss(numbers);
std::vector<int> int_numbers;
std::transform(std::istream_iterator<std::string>(iss),
    std::istream_iterator<std::string>(),
    std::back_inserter<std::vector<int> >(int_numbers), 
    boost::lambda::bind(&boost::lexical_cast<int, std::string>, boost::lambda::_1)
    );

但是你需要来自boost库的lambda和lexical cast。