0

以下は、テキスト ファイル parameters.in 内の 2 つの文字列を置き換えようとしているコードですが、何らかの理由で 2 番目の文字列のみが置き換えられます。置換は、関数 ModifyParametersIn を使用して main() で行われます。誰でもそれを修正する方法についてヒントを与えることができますか?

void ModifyParametersIn(string search_string, string replace_string) {
  string inbuf;
  fstream input_file("parameters.in", ios::in);
  ofstream output_file("parameters.out");

while (!input_file.eof()) {
      getline(input_file, inbuf);

      int spot = inbuf.find(search_string);
      if(spot >= 0) {
         string tmpstring = inbuf.substr(0,spot);
         tmpstring += replace_string;
         tmpstring += inbuf.substr(spot+search_string.length(), inbuf.length());
         inbuf = tmpstring;
      }
      output_file << inbuf << endl;

int main() {
...
 string search_string = "start_a0 = " + str_start_a0;
  string replace_string ="start_a0 = " + str_middle_a0;
  cout << search_string << endl;
  ModifyParametersIn(search_string, replace_string);
  search_string = "start_tanb = " + str_start_tanb;
  replace_string = "start_tanb = " + str_middle_tanb;
  ModifyParametersIn(search_string, replace_string);
  cout << search_string<< endl;
return 0;
}
4

1 に答える 1

3

の 2 回目の実行で元のファイルを開き、ModifyParameterIn出力ファイルを上書きするためです。したがって、最初の変更は単純に上書きされます。関数でファイルを開くのではModifyParametersInなく、main. もちろん、これには、置換しようとしている 2 つの文字列がファイル内で正しい順序である必要があるという問題があります。そうしないと、1 つの置換も失敗します。

ModifyParametersInまた、関数で最後に書き込んだファイルを開き、それを新しいファイルに書き込んで、最後のファイルのみを使用する一連の新しいファイルを作成するという魔法をかけることもできます。しかし、それはかなり醜いです。

于 2013-08-09T08:22:38.317 に答える