2014-10-31 93 views
0

我正在讀取文本文件中某行的字符串,並且由於某些原因代碼不會讀取整個文本文件。它讀取一些隨機點,然後停止並從一行或幾行遺漏幾個字。這是我的代碼。正確讀取文本文件

string total; 
while(file >> word){ 
    if(total.size() <= 40){ 
     total += ' ' + word; 
    } 
    else{ 
     my_vector.push_back(total); 
     total.clear(); 
    } 

下面是一個文件的例子

程序證明,貼有知情體育標誌的所有營養補充劑和/或成分已對禁用物質由世界級的體育反被測試LGC的摻雜實驗室。選擇使用補充劑的運動員可以使用上述搜索功能來查找通過嚴格認證流程的產品。

它讀直到「通過」並遺漏了最後四個單詞。

我希望輸出是整個文件。不只是它的一部分。 這是我如何打印矢量。

for(int x = 0; x< my_vector.size(); ++x){ 
    cout << my_vector[x]; 
    } 
+0

請給我們一個文件和輸出的例子。 – 0x499602D2 2014-11-01 00:09:17

+0

以下是一個文件示例:「該程序證明所有營養補充劑 和/或含有Informed-Sport標誌的成分已由 由世界級運動會 反興奮劑實驗室,LGC進行了測試。運動員選擇使用補充 可以使用上述搜索功能找到有 通過這個嚴格的認證過程的產品。「它讀直到「通過」並遺漏了最後四個單詞。 – 2014-11-01 00:13:11

+0

你能告訴我們你用來打印數據的代碼嗎? (把它編輯成像我這樣做的問題)。 – 0x499602D2 2014-11-01 00:24:33

回答

3

你錯過了這裏兩件事情:

第一:在情況下total.size() is not <= 40 i.e >40它移動到別的部分,你只更新您的my_vector但忽略word當前數據,你從文件中讀取。您實際上需要在total.clear()之後更新total。第二:當你的循環結束時,你也忽略word中的數據。你需要考慮和push_back()向量(如果需要,取決於你的程序邏輯)。

所以你的整體代碼是這樣的。

string total; 
while(file >> word) 
{ 
    if(total.size() <= 40) 
    { 
     total += ' ' + word; 
    } 
    else 
    { 
     my_vector.push_back(total); 
     total.clear(); 
     total += ' ' + word; 
    } 
} 
my_vector.push_back(total);//this step depends on your logic 
          //that what u actually want to do 
0

當讀取文件結尾時,循環結束。但是在這一點上你仍然有數據在total。在循環後添加如下內容:

if(!total.empty()) { 
    my_vector.push_back(total); 
} 

將最後一位添加到向量中。

0

有兩個問題:

  1. 40 < total.size()total推到my_vector但目前word不是。您應該無條件地將該單詞追加到total,然後my_vector.push_back(total),如果40 < total.size()
  2. 當循環終止時,您仍然需要push_back()total的內容,因爲它可能沒有達到大於40的大小。也就是說,如果total在循環終止後不爲空,則仍需將其附加到my_vector