无法使atoi接受一个字符串(字符串与C字符串?)

时间:2013-05-02 19:37:29

标签: c++ string file-io atoi

我已从文件中读取一行,并尝试将其转换为int。出于某种原因,atoi()(将字符串转换为整数)将不接受std::string作为参数(可能是字符串与c字符串与字符数组的问题?) - 我如何获得{{1工作正确所以我可以解析这个文本文件? (将从中抽出大量的赌注)。

代码:

atoi()

导致问题的一行是:

int main()
{
    string line;
    // string filename = "data.txt";
    // ifstream file(filename)
    ifstream file("data.txt");
    while (file.good())
    {
        getline(file, line);
        int columns = atoi(line);
    }
    file.close();
    cout << "Done" << endl;
}

给出错误:

  

错误:无法将参数“1”的int columns = atoi(line); 转换为'std::string'为“int 'const char*'

如何使atoi正常工作?

编辑:谢谢大家,它的确有效!新代码:

atop(const char*)

也想知道为什么     string filename =“data.txt”;     ifstream文件(文件名) 失败了,但是

int main()
{
string line;
//string filename = "data.txt";
//ifstream file (filename)
ifstream file ("data.txt");
while ( getline (file,line) )
{
  cout << line << endl;
  int columns = atoi(line.c_str());
  cout << "columns: " << columns << endl;
  columns++;
  columns++;
  cout << "columns after adding: " << columns << endl;
}
file.close();
cout << "Done" << endl;
}

的作品? (我最终将从命令行读取文件名,因此需要使其不是字符串文字)

3 个答案:

答案 0 :(得分:7)

为此目的存在c_str方法。

int columns = atoi(line.c_str());

BTW你的代码应该阅读

while (getline (file,line))
{
    ...

仅仅因为文件“好”并不意味着 next getline会成功,只有 last getline成功。在你的while条件下直接使用getline来判断你是否确实读过一行。

答案 1 :(得分:2)

int columns = atoi(line.c_str());

答案 2 :(得分:1)

使用line.c_str()代替line

此atoi需要const char*而不是std::string