3

さて、これは宿題ですが、もう1週間は予定されておらず、課題の最終的な詳細は完全にはわかりません。簡単に言えば、彼がクラスでどのような概念を紹介するのかわからないまま、私は課題に挑戦することにしましたが、問題にぶつかりました。宿題のために私がする必要があることの一部は、入力ファイルから個々の文字を読み取り、次に、含まれている単語内の文字の位置を指定して、画面全体で文字を繰り返すことです。私が抱えている問題は、テキストファイル内の単語が単一の単語であり、それぞれがファイル内の異なる行にあることです。この割り当てに使用できるかどうかわからないので、を使用<string>せずに行の終わりを識別する方法があるかどうか疑問に思いました<string>

今、私はifstream fin;文字を引き出すために単純なものを使用しています。ある単語の終わりと別の単語の始まりを認識させる方法がわかりません。コードを含めるために、これまでに得たものは次のとおりです。ある種のendl文字が表示されることを期待していましたが、すべての単語を一緒に実行して出力するだけです。

ifstream fin;
char charIn;

fin.open("Animals.dat");
fin >> charIn;
while(!fin.eof()){
    cout << charIn;
    fin >> charIn;
}

私が最初に含めるのを忘れたいくつかのこと:

入力時に各文字を処理する必要があります(次の文字を読み込んでカウンターを増やす前に、出力するループを実行する必要があります)。また、「Animals.dat」の単語の長さが異なるため、反復回数を設定することができません。fin.get()または.getline()についても説明していないため、これらも立ち入り禁止です。

正直なところ、これが不可能だとは想像できませんが、制約があるとしても、私はそれほど怒っていません。しばらく座るのは楽しい問題だと思っていました。

4

2 に答える 2

1

文字の配列を使用してみませんか?次のように試すことができます:

    #define MAX_WORD_NUM 20
    #define MAX_STR_LEN 40 //I think 40 is big enough to hold one word.
    char words[MAX_WROD_NUM][MAX_STR_LEN];

次に、単語に単語を入力できます。

    cin >> words[i];
于 2013-03-13T02:29:15.293 に答える
0

演算子は空白を無視する>>ため、改行文字を取得することはありません。<string>クラスが許可されていない場合でも、c文字列(文字の配列)を使用できます。

ifstream fin;
char animal[64];

fin.open("Animals.dat");

while(fin >> animal) {
  cout << animal << endl;
}

c文字列(animal上記の文字)から文字を読み取る場合、最後の文字は常に0であり、「\0」または。で表されることもありNULLます。これは、単語内の文字を反復処理するときにチェックするものです。例えば:

c = animal[0];
for(int i = 1; c != 0 && i < 64; i++)
{
    // do something with c
    c = animal[i];
}
于 2013-03-13T02:47:28.313 に答える