下面是试图替换文本文件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;
}
答案 0 :(得分:3)
因为您在第二次运行ModifyParameterIn
时打开原始文件并覆盖输出文件。因此,您首先改变只是被覆盖。您不应该在ModifyParametersIn
函数中打开文件,而是在main
中打开文件。这当然有一个问题,你要替换的两个字符串必须在文件中的顺序正确,否则,一个替换也将失败。
您还可以通过函数ModifyParametersIn
打开上次写入的文件,并将其写入新文件,从而产生一堆新文件,其中只使用最后一个文件。但那很难看。