Как конвертировать строку C++ в int?
Возможный дубликат:
Как разобрать строку в int в C++?
Как конвертировать строку C++ в int?
Предположим, вы ожидаете, что строка будет содержать действительные числа (например, "1", "345", "38944").
Кроме того, давайте предположим, что у вас нет буста, и вы действительно хотите сделать это способом C++, а не грубым старым способом C.
8 ответов
#include <sstream>
// st is input string
int result;
stringstream(st) >> result;
Используйте потоки C++.
std::string plop("123");
std::stringstream str(plop);
int x;
str >> x;
/* Lets not forget to error checking */
if (!str)
{
// The conversion failed.
// Need to do something here.
// Maybe throw an exception
}
PS. Этот основной принцип, как библиотека повышения lexical_cast<>
работает.
Мой любимый метод - повышение lexical_cast<>
#include <boost/lexical_cast.hpp>
int x = boost::lexical_cast<int>("123");
Он предоставляет метод для преобразования между строковым и числовым форматами и обратно. Под ним используется строковый поток, поэтому все, что может быть маршалировано в поток, а затем не маршалировано из потока (посмотрите на операторы >> и <<).
Я использовал что-то вроде следующего в коде C++:
#include <sstream>
int main()
{
char* str = "1234";
std::stringstream s_str( str );
int i;
s_str >> i;
}
C++ FAQ Lite
[39.2] Как мне преобразовать std::string в число?
Позвольте мне добавить свой голос за повышение::lexical_cast
#include <boost/lexical_cast.hpp>
int val = boost::lexical_cast<int>(strval) ;
Это бросает bad_lexical_cast
по ошибке.
Возможно, я неправильно понимаю вопрос, почему именно вы не хотите использовать atoi? Я не вижу смысла изобретать велосипед.
Я просто упускаю суть здесь?
В "stdapi.h"
StrToInt
Эта функция сообщает вам результат и сколько символов участвовало в преобразовании.