2015-02-09 12 views
0

我有文本文件:C++函數getline()不能正確加載的所有字符充滿了類似這些字符

¶§čç†8,ĄyŚ}¦PÜĎY®Všw†inmĘkÚhíU」*Q–­Ö}W"ĄőK=Ć「7ßńĎ_0§ĄŚĆš‰ö¤˝†’?šŕý 
î7ź®xż¶¸tÔuYÖa7Ź+6cE#U+:ç˛ů€°6%·˝Î÷Ľm‹¶ĺ¬‰,Y¤r$Ň「üDGhô‚J°ÜYŽäóa·7¶1Ľľ˝.— 
bőľaŇ•Ďűż3«ű4°JT.ń¨kŢ&Ś6ÄmĆŕY0Ż/´~9.źÍéşď®ŁýçľURíOQS ›iJ±bĄB「˝¸&§řőUdüió^˛l˛ 
\›¨úlu+ĆŃSÔPÖDő±Qf6Ö\yÁ17$ŘĆMńŻß:g’×@ř–äy§_ĺąFsMWÓ‰[email protected]ݱ˝BvÓᯍ’;F¦jąÔî/ż/Ă 

而且有將近數百人行。當你在記事本中打開一些圖像時,它會遇到同樣的問題。

我的任務是找到該文件,例如裏面的一些隱藏的話:「蘋果」,「汽車」等我該怎麼是這樣的:

ifstream buffer; 
buffer.open("myFile.txt"); 

string str1; 

while(getline(buffer, str1)){ 

if(str1.find("apple")!=std::string::npos) 
      counter++; 

if(str1.find("car")!=std::string::npos) 
      counter++; 

} 

它,當我打開文件,將「正常工作正常「字符,但只要有那些不尋常的字符,getline()在加載整行時就會出現問題。

我加入這一行成周期:

myOutputFile << str1; 

要確保,如果函數getline加載所有線路正常,但在我的測試輸出文件只寫+ -30線從CCA 200 ..我已經也試過get()函數,但結果是一樣的。它似乎有一些字符get/getline不能處理,並強制它停止加載下一個字符/行。

所以我的問題是:有沒有辦法如何強制getline處理這種情況,或者通常以任何方式如何找到這種奇怪的字符之間的特定詞?

謝謝。


解決:

我在二進制模式打開該文件,現在它的工作。

buffer.open("myFile.txt", ios::binary); 

非常感謝乾杯和hth。 - Alf

+0

我懷疑你遇到嵌入式空值。 – 2015-02-09 00:54:33

+0

你確定「apple」不能在一行中出現兩次嗎? – Beta 2015-02-09 01:08:18

+0

@貝塔它可以但確切的數字對我來說現在並不重要。如果能夠找到至少一個字,我會很感激。現在我在0. – 2015-02-09 10:09:59

回答

0

在Windows中,Ctrl Z(ASCII 26)將按照約定指示文本結束。

爲避免這種情況,請以二進制文件的形式打開文件。

或者使用較低級別的二進制文件I/O。

+0

我想我會通過從週期中的條件中刪除eof來避免它 – 2015-02-09 10:19:58