Другие языки программирования и технологии

Как вычленить из строки два целых числа? C++

Есть задача, где необходимо из текстового файла взять два числа, разделённых пробелом, и найти их сумму. Считываю данные из файла и привожу к строке, но как взять эти числа из строки не знаю. Заранее спасибо за помощь.
Для преобразования чисел в строковой форме в числа есть несколько методов:
1) Семейство функций strtol (живет в stdlib.h)
2) Богомерзкие функции семейства scanf
3) Семейство функций вида std::stoi из C++

Пример для С (подключить stdio.h и stdlib.h):
char* num = "123456";
char* end; // Остаток строки
long l; // Число после преобразования

l = strtol( num, &end, 0 );
if( *end != '\0' )
{
printf( "Не удалось полностью преобразовать строку '%s' в число: обнаружен мусор '%s'\n", num, end );
}

Пример на C++ ( подключить iostream, string, stdexept ):
// Строка для преобразования
std::string str;
// Число
int num;

str.assign("123456");
try
{
num = std::stoi( str, &size );
std::cout << "Строка '" << str << "' преобразована в число " << num << std::endl;
}
catch ( const std::invalid_argument& ia )
{
std::cerr << "Неверный аргумент: " << ia.what() << std::endl;
}
catch ( const std::out_of_range& oor )
{
std::cerr << "Значение вне диапазона: " << oor.what() << std::endl;
}
// Произошло хз что и хз где
catch (std::exception& e)
{
std::cerr << "Исключение: " << e.what() << std::endl;
}
Сергей Протченко
Сергей Протченко
9 624
Лучший ответ
Читай сразу числа оператором >>
Асылбек Мухамбетов вполне! даже и строгое можно реализовать - чтобы с лишними пробелами ввести не давало - просто смотреть позицию каретки...
Олег Лексиков Для решения конкретно этой задачи пойдет, но в общем случае это неудачное решение. Лучше считывать строку и затем уже производить ее разбор.
в ASCII числа находятся в определенном диапазоне
рассматривайте строку как массив char, встречаясь с пробелом сравнивайте следющие символы в этот диапазон, если да, сохраняете их новый массив char до тех пор пока выполняется условие и пока не встретите новый пробел. ну а потом массив опять переводите в число
Юра Казирод
Юра Казирод
12 890