строка в целое число - PullRequest
       47

строка в целое число

2 голосов
/ 30 ноября 2009

Я не могу сделать это в C ++

string temp = "123";
int t = atoi(temp);

почему ????

Ответы [ 6 ]

8 голосов
/ 30 ноября 2009

Это потому, что atoi ожидает необработанный указатель const char*. Поскольку не существует неявного преобразования из std::string в const char*, вы получаете ошибку компилятора. Используйте c_str() метод std::string, чтобы получить c-стиль const char* для объекта std :: string. Кстати, в C ++ вы можете использовать потоки для этого преобразования вместо использования этих API-интерфейсов в стиле C.

6 голосов
/ 30 ноября 2009
atoi(temp.c_str())
3 голосов
/ 30 ноября 2009

Смотрите эти вопросы:

C atoi () строка в int : указывает, что atoi () устарела.

Почему C ++ не переопределяет стандартные функции C со стилем элементов C ++? : Дает альтернативные способы сделать то, что вы перечислили выше.

1 голос
/ 30 ноября 2009

Итак, вы передали std :: string (предположительно) в atoi, который принимает const char *. Попробуйте:

atoi(temp.c_str());

, о котором упоминалось ранее. Вместо этого вы можете использовать Boos lexical_cast :

std::string temp = "123";
try {
   int foo = boost::lexical_cast<int>(temp);
} catch (boost::bad_lexical_cast e) {
   //handle error here
}

Вы можете заключить try / catch в функцию шаблона, которая обрабатывает исключения, если у вас еще нет обработки исключений.

0 голосов
/ 30 ноября 2009
int i = 12345;

std::string s;

std::stringstream sstream;

sstream << i;

sstream >> s;
0 голосов
/ 30 ноября 2009

std :: string не совпадает с символьным указателем (как в C).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...