我有一个std::string
,其中包含3个以空格分隔的数字
例如:123334 33335 54544
。如何快速提取这三个数字?
int r = ... /* 123334 */
int g = ... /* 33335 */
int b = ... /* 54544*/
答案 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。