Ответ 1
#include <sstream>
// st is input string
int result;
stringstream(st) >> result;
Возможный дубликат:
Как разбирать строку в int на С++?
Как преобразовать строку С++ в int?
Предположим, что вы ожидаете, что строка содержит фактические цифры (например, "1", "345", "38944" ).
Кроме того, предположим, что у вас нет повышения, и вы действительно хотите сделать это на С++, а не на жестоком старом пути C.
#include <sstream>
// st is input string
int result;
stringstream(st) >> result;
Используйте потоки С++.
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. Этот основной принцип заключается в том, как работает библиотека boost lexical_cast<>
.
Мой любимый метод - это boost lexical_cast<>
#include <boost/lexical_cast.hpp>
int x = boost::lexical_cast<int>("123");
Он предоставляет способ преобразования между строковым и числовым форматами и обратно. Под ним используется поток строк, так что все, что может быть маршалировано в поток, а затем не связано с потоком (посмотрите на → и < операторы).
Я использовал в коде С++ что-то вроде следующего:
#include <sstream>
int main()
{
char* str = "1234";
std::stringstream s_str( str );
int i;
s_str >> i;
}
С++ FAQ Lite
[39.2] Как преобразовать std::string в число?
https://isocpp.org/wiki/faq/misc-technical-issues#convert-string-to-num
Позвольте мне добавить свой голос для boost:: lexical_cast
#include <boost/lexical_cast.hpp>
int val = boost::lexical_cast<int>(strval) ;
Он выдает bad_lexical_cast
при ошибке.
Используйте atoi
Возможно, я не понимаю вопрос, почему именно вы не захотите использовать atoi? Я не вижу смысла изобретать колесо.
Я просто пропустил здесь пункт?
в "stdapi.h"
StrToInt
Эта функция сообщает вам результат и количество символов, участвующих в преобразовании.