Как конвертировать строку 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 в число?

https://isocpp.org/wiki/faq/misc-technical-issues

Позвольте мне добавить свой голос за повышение::lexical_cast

#include <boost/lexical_cast.hpp>

int val = boost::lexical_cast<int>(strval) ;

Это бросает bad_lexical_cast по ошибке.

Используйте Атои

Возможно, я неправильно понимаю вопрос, почему именно вы не хотите использовать atoi? Я не вижу смысла изобретать велосипед.

Я просто упускаю суть здесь?

В "stdapi.h"

StrToInt

Эта функция сообщает вам результат и сколько символов участвовало в преобразовании.

Другие вопросы по тегам