1

hangman_word_collection.txtファイルを作成し、ファイルのすべてのコンテンツを文字列行に保存しました。

プログラムで行文字列を使用したいのですがline[0]、値が含まれていないか、何かが含まれているかどうかわかりません。

私はこれに不慣れです助けてください。

コードは次のとおりです。

#include <iostream>
#include <fstream>

using namespace std;

int main() {
string line;

ifstream myfile ("hangman_word_collection.txt");
if (myfile.is_open()) {
    while (myfile.good()) {
        getline (myfile,line);
        cout << line << endl;
    }
}
for(int i=0; i <= 79; i++) {
    cout << "\n" << i;
    cout << ":" << line[i];
}
return 0;
}

そして出力:

actingraringbackupcampusdacoiteasilyfabricgardenhackediceboxprimeralwaysupload.


0:
1:c
2:t
3:i
4:n
5:g
6:r
7:a
8:r
9:i
10:n
11:g
12:b
13:a
14:c
15:k
Press <RETURN> to close this window...
4

1 に答える 1

6

ターゲットへの書き込みにgetline失敗するlineと、その文字列の内容は変更されないと想定しますが、文字列は空白になり、内部的に文字0がヌル文字に置き換えられます。

論理文字列の末尾から文字を読み取るため、残りは未定義の動作です。

この問題を修正するには、コードを次のように変更します。

string line;

ifstream myfile ("hangman_word_collection.txt");
if (myfile.is_open())
{
    while (myfile.good())
    {
       std::string temp;
       if( getline( myfile, temp ) )
       {
           temp.swap( line );
           cout <<line<<endl;
       }
    }
}

79のようなマジックナンバーをハードコーディングするのは悪い習慣であることに注意してください。line.size()代わりに入力した場合、文字列が実際にどのサイズであるかがわかり、未定義の動作はありません。パフォーマンスが心配な場合は、ループ外の変数にこれを格納できますが、ほとんど違いはありません。

于 2013-01-09T11:09:08.810 に答える