C++ 如何替换文本文件中的多个字符串?c++;

C++ 如何替换文本文件中的多个字符串?c++;,c++,string,replace,C++,String,Replace,下面是试图替换文本文件parameters.in中的两个字符串的代码,但是由于某种原因,只有第二个字符串被替换。在main()中使用函数ModifyParametersIn进行替换。有人能给出一个关于如何解决这个问题的提示吗 void ModifyParametersIn(string search_string, string replace_string) { string inbuf; fstream input_file("parameters.in", ios::in);

下面是试图替换文本文件parameters.in中的两个字符串的代码,但是由于某种原因,只有第二个字符串被替换。在main()中使用函数ModifyParametersIn进行替换。有人能给出一个关于如何解决这个问题的提示吗

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;
}
void modifyParameters in(字符串搜索字符串、字符串替换字符串){
字符串inbuf;
fstream输入_文件(“parameters.in”,ios::in);
流输出文件(“parameters.out”);
而(!input_file.eof()){
getline(输入_文件,inbuf);
int spot=inbuf.find(搜索字符串);
如果(点>=0){
字符串tmpstring=inbuf.substr(0,spot);
tmpstring+=替换_字符串;
tmpstring+=inbuf.substr(spot+search_string.length(),inbuf.length());
inbuf=tmpstring;
}

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


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

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


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

首先,不要执行
while(!input_file.eof())
,而是执行
while(getline(…)
其次,您可能希望使用
而不是您自己的替换代码。可以解释为什么(关于您的第一条评论)?例如,请参阅。为什么您使用
fstream
而不是
ifstream
作为输入流?首先,不要在(!input_file.eof())
的同时执行
(getline(…)
其次,您可能希望使用而不是您自己的替换代码。可以解释为什么(关于您的第一条评论)?请参见,例如,您为什么使用
fstream
而不是
ifstream
作为输入流?