0

ファイルを開くように機能するプログラムをコーディングしたいのですが、「Hello World」が見つかった場合、プログラムは「Hello World」の前のテキストを新しいファイルに自動的にコピーします。

問題は、「バッファ」内のテキスト「hello world」をどのように削除できるかです。たとえば、次のようになります。

  buffer = new char [Size];

  ifstream fstr;

  fstr.open(path, ios::in);

  fstr.read(buffer, (Size));

  fstr.close();

  //what should i write here about copying the rest of the text except 

  //Hello World? 

  ofstream outputFile(path2, ios::out);

  outputFile << buffer;

  outputFile.close();

助けてくれてありがとう :) ところで、私は Borland C++ を使用しており、学習者です。

4

2 に答える 2

0

ファイルがすべてテキストであると仮定すると、strstrを使用して "Hello World" を検索し、文字列の末尾を設定できます。

char *Found = strstr(buffer, "Hello World"); 
if (Found != NULL) 
   *Found = 0;
于 2012-06-26T07:01:10.493 に答える
0

最初の落とし穴!タイプの問題。

  1. ファイルに「Hello World」が含まれていない場合はどうなりますか?
  2. 「Hello World」が含まれている場合はどうなりますか?
  3. 「Hello World」が含まれていて、「World」が次の行から始まる場合はどうなりますか?

私はこれらに対する答えを持っていません。それはあなた次第であり、これが宿題である場合はインストラクター次第です。

ここでの提案: C スタイルの文字列ではなく、C++ 文字列 (std::string) を使用します。

C ではstrstr、その文字列の場所を見つけるために呼び出すことができます。見つかった場合は、見つかった場所に 0 を書き込むか、見つかった場所にstrcpy空の文字列を書き込みます。

C++ では、メンバー関数を使用してターゲット文字列の場所を見つけることができますfind。見つかった場合は、見つかった場所以降のものをメンバー関数で消去しますerase

どの関数/メンバー名がより理にかなっていますか? 「Hello World」から消去する方法はどれがより理にかなっていますか? 今から 6 か月後にどのコードに戻ってきますか?

于 2012-06-26T07:10:54.920 に答える