0

下面是尝试替换文本文件 parameters.in 中的两个字符串的代码,但是由于某种原因,只有其中的第二个被替换。使用函数 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

因为您在第二次运行时打开原始文件ModifyParameterIn并覆盖输出文件。因此,您的第一个更改被简单地覆盖。您不应该在ModifyParametersIn函数中打开文件,而应该在main. 这当然有一个问题,即您要替换的两个字符串在文件中的顺序必须正确,否则一个替换也会失败。

您还可以使用一些魔法来打开您上次在函数中ModifyParametersIn写入的文件并将其写入一个新文件,从而生成一堆新文件,其中您只使用最后一个文件。但这相当难看。

于 2013-08-09T08:22:38.317 回答