-7

この宿題の質問があります:

テキスト ファイル内の単語 ' do 'の存在をカウントする関数を C++ で記述します。

私が試したこと:

最初にテキスト ファイル内の単語 ' d ' を検索してから、' o ' がその直後にある場合は検索しようとしました。

#include <iostream>
#include <fstream>

using std::fstream;
using std::cout;
using std::ios;

int main()
{
    char ch[10];
    int count=0, a=0;
    fstream f;
    f.open("P.txt", ios::in);

    while(!fin.eof())
    {
        fin.get(ch)
        if (ch[a]=='d')
        {
            if ((a++)=='o')
                count++;
        } 
        a++;
    }
    cout << "the no of do's is" << count;
    f.close();
}

しかし、この考えはまったく役に立ちません。他にアイデアが思いつきません。これに関するヒントを 2 つのシナリオで提供したいと思います。

1.独立して存在する単語「do」を数える。

2.テキストのどこかにある「do」という単語を数えます。

これはデータファイルの取り扱いに関する質問です。

4

1 に答える 1

1

アルゴリズムは、あなたが持っているものに従います。while ループを次のように構成します。

while(!fin.eof()) {
    bool found = false;    
    do {
        fin.get(ch);
        found = found || ch == 'd';
    } while (ch == 'd' && fin);

    if (found && ch == 'o') {
        // boom goes the dynamite
    }
}

の目的は、do-while繰り返しの を排除することです。dそのため、そのループの後、次の文字が であるかどうかを簡単に確認できますo

ノート

  • タイピングに関しては、のタイプchchar ch

説明した

  • while(!fin.eof())
    • ファイルの最後に到達するまで、次の数行を繰り返します
  • do {
    • do-whileループの始まり
  • fin.get(ch);
    • ファイルから 1 バイト (文字) を読み取る
  • found = found || ch == 'd';
    • すでに が見つかっている場合、または現在の文字が であるfound場合は、true に設定します。dd
  • } while (ch == 'd' && fin);
    • の終わりdo-while。最後に読み取った文字が a でなくなるまで、dまたはファイルの最後に到達するまで、ループを繰り返します。
  • if (found && ch == 'o') {
    • trueに設定するための条件を満たすことができfound、最後に読み取った文字がo...
  • // boom goes the dynamite
    • その後、単語を見つけることに成功しましたdo

サンズstd::ios::eof

この次の部分については説明しませんが、すでに投稿した内容に密接に従います。ここでの目標は、すでに空のファイルを読み取らないようにすることです。

while(fin >> ch) {
    while(ch == 'd' && fin.get(ch)) {    
        if (ch != 'd') {
            if (ch != 'o') {
                break;
            }
            // Found it!
        }
    }
}
于 2017-01-11T17:14:24.137 に答える