2

ファイルから行を読み取り、それを int に変換しようとしています。何らかの理由atoi()で (文字列を整数に変換) 引数として a を受け入れませんstd::string(文字列 vs c-strings vs char 配列の問題でしょうか?) -atoi()このテキスト ファイルを解析できるようにするにはどうすればよいですか? (そこから多くのintを引き出す予定です)。

コード:

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;
}

問題を引き起こしている行は次のとおりです。

int columns = atoi(line);

エラーが発生します:

'std::string'エラー: 引数 '1'を'const char*''int atop(const char*)'に変換できません

atoi を適切に動作させるにはどうすればよいですか?

編集:すべてありがとう、それは動作します!新しいコード:

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;
}

また、なぜ string filename = "data.txt"; なのか疑問に思っています。ifstream ファイル (ファイル名) は失敗しますが、

    ifstream file("data.txt");

動作しますか?(最終的にはコマンドラインからファイル名を読み取るので、文字列リテラルではないようにする必要があります)

4

3 に答える 3

7

この目的のために c_str メソッドが存在します。

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

ところで、あなたのコードは読むべきです

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

ファイルが「正常」だからといって、次のgetline が成功するわけではなく、最後のgetline が成功したというだけです。while 条件で getline を直接使用して、実際に行を読み取ったかどうかを確認します。

于 2013-05-02T19:39:20.713 に答える
2

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

于 2013-05-02T19:39:37.657 に答える
1

line.c_str()だけの代わりに使用line

このアトイは、そうではありconst char*ませんstd::string

于 2013-05-02T19:39:19.433 に答える