2013-08-09 6 views
0

다음은 텍스트 파일 parameters.in에서 두 개의 문자열을 대체하려고하는 코드입니다. 그러나 두 번째 문자열 만 어떤 이유로 대체됩니다. 대체는 ModifyParametersIn 함수를 사용하여 main()에서 발생합니다. 아무도 그 문제를 해결할 수있는 힌트를 줄 수 있습니까?텍스트 파일에서 여러 문자열을 바꾸는 방법은 무엇입니까? C++

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; 
} 
+2

처음에는'while (! input_file.eof())'을하지 말고'while (getline (...)) '을하십시오. –

+0

둘째, ['replace'] 대신 자신의 교체 코드 대신 http://en.cppreference.com/w/cpp/string/basic_string/replace)를 사용하십시오. –

+0

왜 (당신의 첫 번째 코멘트와 관련해서) 설명 할 수 있습니까? – Gleb

답변

3

ModifyParameterIn의 두 번째 실행시 원본 파일을 열고 출력 파일을 덮어 씁니다. 따라서 처음 변경하면 단순히 덮어 씁니다. 파일은 ModifyParametersIn 함수로 열지 말고 main으로 엽니 다. 이것은 물론 교체하려는 두 개의 문자열이 파일의 올바른 순서로되어 있어야한다는 문제가 있습니다. 그렇지 않으면 하나의 대체 또한 실패합니다.

마지막으로 작성한 파일을 열어서 ModifyParametersIn 새 파일에 쓰면 새로운 파일이 만들어지고 마지막 파일 만 사용하면됩니다. 그러나 그것은 오히려 추악합니다.

관련 문제