Преобразование std::string в целое число

Я пытаюсь преобразовать std::string, хранящийся в std::vector, в целое число и передать его функции в качестве параметра.

Это упрощенная версия моего кода:

vector <string> record;
functiontest(atoi(record[i].c_str));

Моя ошибка заключается в следующем:

error: argument of type ‘const char* (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const’ does not match ‘const char*’

Как я могу это сделать?


person Daniel Del Core    schedule 27.09.2012    source источник
comment
Вам нужно вызвать его, но есть много лучших методов, чем atoi.   -  person chris    schedule 27.09.2012
comment
Опечатка record[i].c_str -> record[i].c_str().   -  person Hindol    schedule 27.09.2012


Ответы (3)


С С++ 11:

int value = std::stoi(record[i]);
person Pete Becker    schedule 27.09.2012
comment
Довольно полезно. Есть ли какой-нибудь надежный пример для ниже С++ 11? - person Md Mahbubur Rahman; 19.03.2014
comment
Внимание, читатель: если вы не уверены на 100 %, что входные данные для std::stoi всегда будут допустимыми целыми числами, вам потребуется настроить try/catch для std::invalid_argument. - person CodeMouse92; 16.04.2016
comment
А также для std::out_of_range. - person ebk; 12.09.2017

record[i].c_str

не то же самое, что

record[i].c_str()

На самом деле вы можете получить это из сообщения об ошибке: функция ожидает const char*, но вы предоставляете аргумент типа const char* (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const, который является указателем на функцию-член класса std::basic_string<char, std::char_traits<char>, std::allocator<char> >, которая возвращает const char* и не принимает аргументов.

person Luchian Grigore    schedule 27.09.2012
comment
Я вижу, как другой ответ лучше, но я не думаю, что этот заслуживает отрицательного голоса... - person Luchian Grigore; 27.09.2012

Используйте stringstream из стандартной библиотеки. Он чище и скорее C++, чем C.

int i3;
std::stringstream(record[i]) >> i3; 
person Indy9000    schedule 27.09.2012
comment
@BЈовић Очень мило. Однако для С++ 11 и далее - person Indy9000; 27.09.2012
comment
я думаю, это должно быть медленнее, чем любые потоки - person Oleg Vazhnev; 02.05.2013
comment
@ Kip9000, на мой взгляд, это плохое предложение. std::stoi гораздо лучше использовать для конвертации. это намного понятнее и намного быстрее. извините, я не могу отменить голосование против, так как мой голос сейчас заблокирован. - person Oleg Vazhnev; 02.05.2013
comment
@javapowered: Это для С++ 11, хотя ... Как говорится в комментариях, но до вашего комментария. - person Aaron H.; 04.12.2014