0

これは初心者の質問です。テキストファイルで文字列を見つけて、同じファイルに置き換えようとしています。次のコードは、ファイルの内容をバッファに収集して正常に機能し、文字列を置き換えます。しかし、データを同じファイルに戻そうとすると、ジャンク文字でいっぱいになります。私が間違っていることを教えてください。

#include <iostream>
#include <fstream>
using namespace std;

const char *fileName = "Test.dat";

int main () {

// This is where we'll put the stuff we read from file
char buffer[ 100 ];


ifstream finout(fileName, ios_base::in | ios_base::out | ios_base::binary);

if(!finout.is_open())
{
    cout << "Can not open file " << endl;
    return(1);
}

while (finout.getline(buffer, sizeof(buffer))
{
    string g( buffer );
    string search = "am";
    string replace = "was";
    long j;

    if ( (j = g.find(str2)) != string::npos)
    {    
        g.replace(g.find(str2), str2.length(), "str");
        finout.write((char *) &g, sizeof(g)); //This won't work 

    }

cout << g << "\n";
finout.close();
return 0;
}

私の Test.dat ファイルには次の情報が含まれています。

Hello, How are you?
I am fine.
4

3 に答える 3

1
  • テキストファイルとして読み書きする場合は、次の方法で開かないでください。ios_base::binary
  • あなたはfinout.close();あなたの読書ループの中に入れます、それでそれはただ1行のために働きます。
  • ファイルをテキストとして読み書きする場合は、テキストストリームのメソッドと演算子を使用してください。
于 2013-03-11T06:55:03.673 に答える
0

まず、ファイルの読み取りと書き込みの両方を行いたいので、ifstream ではなく fstream を使用します。2 番目に、テキスト ファイルがあるので、ios_base::binary を使用しないでください (単純に finout << g; と書くだけです。

これで、実装について考え始めることができます...

于 2014-09-10T11:15:51.567 に答える
0

演算子で文字列のサイズを読み取ろうとしていますsizeof()

これは、オブジェクトまたはタイプの非動的サイズを与えるキーワードであるため、機能しません。

g.size()文字列サイズにアクセスするために使用する必要があります!

しかし、そもそも、ストリームを処理してバグを処理できます。

finout << g;

仕事をします。

于 2013-03-11T06:57:32.300 に答える