2016-04-28 72 views
-4

我正在閱讀以下文本文件逐字替換單詞「@ name @」和「@ festival @」。我的程序完美適用於@ name @,但只改變了第一個@ festival @,但不是第二個。我不知道爲什麼。爲什麼我可以在文本文件中替換一個單詞而不是另一個單詞?

李四

客房213-A

通用舊建築

信息學院科技

編程州立大學

紐約NY 12345-0987

美國

要:@名@

主題:節日的問候:@節@

親愛的@名@,

一個非常@節@你和你的家人!

你的真誠,

約翰

void Main::readFile() 
{ 
while (v.size() != 0) { 
    string name; 
    name = v.at(v.size()-1); 
    v.pop_back(); 
    std::ofstream out(name + ".txt"); 
    ifstream file; 
    file.open("letter.txt"); 
    string word; 
    string comma; 
    char x; 
    word.clear(); 

    while (!file.eof()) 
    { 
     x = file.get(); 

     while (x != ' ' && x != std::ifstream::traits_type::eof()) 
     { 
      if (word == "@[email protected]") { 
       word = name; 
      } 
      if (word == "@[email protected]") { 
       word = "THISISATEST!!!!!!!!!!!!!!"; 
      } 
      word = word + x; 
      x = file.get(); 
     } 

     out << word + " "; 
     word.clear(); 
    } 
} 
+0

當您逐步完成代碼時,調試器會顯示什麼內容? –

回答

0

首先,看Why is iostream::eof inside a loop condition considered wrong?

這不是一個完美的解決方案......但是更好的改善您的原代碼。 (我會讓你想到更高效的解決方案):

void Main::readFile() 
{ 
while (v.size() != 0) { 
    string name; 
    name = v.at(v.size()-1); 
    v.pop_back(); 
    std::ofstream out(name + ".txt"); 
    ifstream file; 
    file.open("letter.txt"); 

    string festival = "THISISATEST!!!"; 
    string line, nameHolder = "@[email protected]", festivalHolder = "@[email protected]"; 
    while (std::getline(file, line)) 
    { 
     std::size_t n_i = line.find(nameHolder); 
     if(n_i != std::string::npos) 
      line.replace(n_i, nameHolder.size(), name); 

     std::size_t f_i = line.find(festivalHolder); 
     if(f_i != std::string::npos) 
      line.replace(f_i, festivalHolder.size(), festival); 

     out << line << '\n'; 
    } 
} 
+0

謝謝,解決了這個問題 – thefreeman

1

問題是內部條件的同時,如果存在' ' @節@以後,會不會是真的。下面的代碼是所有的正確

void Main::readFile() 
{ 
while (v.size() != 0) { 
    string name; 
    name = v.at(v.size()-1); 
    v.pop_back(); 
    std::ofstream out(name + ".txt"); 
    ifstream file; 
    file.open("letter.txt"); 
    string word; 
    string comma; 
    char x; 
    word.clear(); 

    while (!file.eof()) 

{ 
    x = file.get(); 

    while (x != ' ' && x != std::ifstream::traits_type::eof()) 
    { 
     if (word == "@[email protected]") { 
      word = name; 
     } 
     if (word == "@[email protected]") { 
      word = "THISISATEST!!!!!!!!!!!!!!"; 
     } 
     word = word + x; 
     x = file.get(); 
    } 
    if (word == "@[email protected]") { 
      word = name; 
    } 
    if (word == "@[email protected]") { 
     word = "THISISATEST!!!!!!!!!!!!!!"; 
    } 

    out << word + " "; 
    word.clear(); 
    } 
} 
+0

我看到你在說什麼,我試着做出你的改變並且工作。不幸的是,我需要它爲x個字符串工作,但是,至少我知道現在有什麼錯誤 – thefreeman

相關問題