Как я могу быстро извлечь эти три числа? - PullRequest
0 голосов
/ 30 марта 2011

У меня есть std::string, который содержит 3 числа, разделенных пробелами, например: 123334 33335 54544.Как я могу быстро извлечь эти три числа?

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

Ответы [ 3 ]

11 голосов
/ 30 марта 2011

Самый простой способ - использовать 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");
3 голосов
/ 30 марта 2011

Создайте объект stringstream, присвойте ему строку, а затем используйте operator>>, чтобы прочитать 3 числа.

1 голос
/ 30 марта 2011

Альтернативное решение было бы.

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)
    );

Но тогда вам нужно лямбда-и лексическое приведение из библиотеки повышения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...