Ответ в теме: Преобразование строки в число (С++)

      Комментарии к записи Ответ в теме: Преобразование строки в число (С++) отключены

Главная Форумы Программирование Программирование на С++ Преобразование строки в число (С++) Ответ в теме: Преобразование строки в число (С++)

#2983

В языке Си для этой задачи можно использовать функцию sscanf, которая ведет себя аналогично scanf, но данные берет не из буфера клавиатуры, а из строки (char*), переданной пользователем:

if (sscanf(string, "%d", &value) == 1)
  printf("your number: %d\n", value);
else 
  printf("wrong input\n");

В случае успешного преобразования функция вернет количество преобразованных элементов (в данном случае единицу).

В языке С++ для этой же цели применяются строковые потоки (std::stringstream). Для преобразования вам нужно поместить в поток строку, а затем считать из нее число нужного типа, например:

#include <sstream>
#include <string>
#include <iostream>
using namespace std;

int main() {
  int value;
  string userString;
  
  stringstream sstr;
  
  cout << "enter integer: ";
  cin >> userString;
  
  sstr << userString; // put string into stringstream
  sstr >> value; // read integer from stringstream
  
  if (sstr.fail()) 
    cout << "wrong input" << endl;
  else
    cout << "your number: " << value << endl;  
}

Эта программа запрашивает у пользователя строку, помещает ее в поток, а затем пытается считать из потока целое число. Если в потоке нет числа – будет выставлен флаг ошибки (можно проверить с помощью stringstream::fail()), в противном случае с потока будет получено первое целое число.