C ++,getline()无法正确加载所有字符

时间:2015-02-09 00:52:03

标签: c++ get ifstream 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Ó‰5@Zݱ˝BvÓᯍ’;F¦jąÔî/ż/Ă

它们有近几百行。当你在记事本中打开一些图像时,它基本上是一样的混乱。

我的任务是在该文件中找到一些隐藏的单词,例如:" apple"," car"我得到的是这个:

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

}

当我使用" normal"打开文件时,它工作正常字符,但只要有那些不寻常的字符,getline()就会出现加载整行的问题。

我将这一行添加到该周期中:

myOutputFile << str1;

要确保getline是否正确加载所有行,但在我的测试输出文件中只写了来自cca 200的+ -30行..我还尝试了get()函数,但结果相同。看起来有一些字符让/ getline无法处理并强制它停止加载下一个字符/行。

所以我的问题是:有什么方法可以强制getline来处理这种情况,或者通常是如何在这种奇怪的字符中找到特定的单词?

谢谢。


解决:

我已经以二进制模式打开该文件,现在正在运行。

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

非常感谢干杯和他。 - Alf

1 个答案:

答案 0 :(得分:0)

在Windows中,Ctrl Z(ASCII 26)按惯例表示文本结尾。

为避免这种情况,请将文件打开为二进制文件。

或使用较低级别的二进制文件i / o。