Извлечение числа из строки, такой как целое или двойное число

Мне сложно придумать способ извлечь число, такое как int или double, из строки, извлеченной из функции getline ().

//Пример:

string data = "";
fstream inFile;

// Файл содержит:

"Hello today is 83.3 degrees Fahrenheit."

// используем функцию getline

getline(inFile, data);

// извлекаем число из строковых данных

Спасибо


person user2125471    schedule 10.03.2013    source источник
comment
С чего бы мне начать? Где я могу найти учебник по этому поводу?   -  person user2125471    schedule 11.03.2013
comment
У вас есть доступ к C ++ 11 или boost (оба из которых содержат регулярные выражения)?   -  person Micha Wiedenmann    schedule 11.03.2013
comment
Я не могу использовать эти типы библиотек.   -  person user2125471    schedule 11.03.2013


Ответы (2)


Вы можете сделать следующее

getline(inFile, data);

std::istringstream iss;
iss.exceptions(std::istream::failbit | std::istream::badbit );

iss.str(data);
double dTemp = 0;

while( iss.good() ){

  try{
   iss >> dTemp;
   }      
  catch(std::istream::failure &e ){
   /* Do your error check over here */
  }

}

Вы также можете захотеть узнать больше о C ++. Проверьте эту ссылку

Надеюсь это поможет.

person Hrushikesh Kulkarni    schedule 10.03.2013
comment
Это полностью потерпит неудачу, поскольку первое, что в строке OP - это не число, а несколько случайных слов. - person us2012; 11.03.2013
comment
Спасибо, согласен с тобой. Нам также нужно проверить биты отказа и биты ошибок. - person Hrushikesh Kulkarni; 11.03.2013

Вы можете использовать sscanf, если готовы включить cstdio.

Следующая ссылка на страницы руководства поможет вам: -

http://linux.die.net/man/3/sscanf

Пример

char foo[] = "foo bar 12 baz";
int qux;
sscanf(foo, "foo bar %d baz", &qux); 
// qux will be assigned 12

or

char foo[] = "foo bar 12.5 baz";
double qux;
sscanf(foo, "foo bar %lf baz", &qux); 
// qux will be assigned 12.5 

Очевидно, вам нужно будет адаптировать это к своему сценарию и принять во внимание различные вопросы безопасности.

person chrisw    schedule 11.03.2013