преобразование строки в int в C ++ - PullRequest
2 голосов
/ 14 апреля 2010

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

ifstream sin;  
sin.open("movie_output.txt");  
string line;  
getline(sin,line);  
myMovie.setYear(atoi(line));

Здесь setYear является мутатором в классе Movie (myMovie - это объект класса Movie), который выглядит следующим образом:

void Movie::setYear(unsigned int year)  
{  
    year_ = year;  
}

Когда я запускаю код, я получаю следующую ошибку:

error C2664: 'atoi' : cannot convert parameter 1 from 'std::string' to 'const char *'  
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

Ответы [ 5 ]

10 голосов
/ 14 апреля 2010

Вместо использования std::getline(std::string&, std::istream&), почему бы просто не использовать оператор извлечения потока для файла?

ifstream sin;
sin.open("movie_output.txt");
unsigned int year = 0;
sin >> year;
myMovie.setYear(year);
5 голосов
/ 14 апреля 2010
#include <boost/lexical_cast.hpp>

Используйте lexical_cast:

int value = boost::lexical_cast<int>(line);
5 голосов
/ 14 апреля 2010

myMovie.setYear(atoi(line.c_str()));

3 голосов
/ 14 апреля 2010

Вы можете сделать atoi(line.c_str())

Другой подход, использующий потоки C ++:

stringstream ss(line);
unsigned int year;
ss >> year;
1 голос
/ 14 апреля 2010

Быстрое решение заключается в использовании line.c_str (), которая предоставляет const char * для atoi ().

Лучшим решением (если доступно) может быть использование boost :: lexical_cast (line). Это более точная версия C ++, позволяющая загружать и выводить данные из std :: stringstream, в котором есть все преобразования типов, которые могут вам понадобиться.

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