【发布时间】:2015-02-09 00:52:03
【问题描述】:
我的文本文件中填充了类似以下的字符:
¶§čç†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++;
}
当我打开带有“正常”字符的文件时它工作正常,但只要有那些不寻常的字符,getline() 在加载整行时就会出现问题。
我将这一行添加到那个循环中:
myOutputFile << str1;
为了确保 getline 是否正确加载了所有行,但在我的测试输出文件中仅写入了 cca 200 的 +-30 行。我也尝试了 get() 函数,但结果相同。似乎有些字符 get/getline 无法处理并强制它停止加载下一个字符/行。
所以我的问题是:有什么方法可以强制 getline 处理这种情况,或者一般来说如何在这种奇怪的字符中找到特定的单词?
谢谢。
已解决:
我已经以二进制模式打开了那个文件,它现在可以工作了。
buffer.open("myFile.txt", ios::binary);
非常感谢干杯和hth。 - 阿尔夫
【问题讨论】:
-
我怀疑您遇到了嵌入的空值。
-
你确定“apple”不能在一行中出现两次吗?
-
@Beta 可以,但确切的数字现在对我来说并不重要。如果它至少能找到一个词,我将不胜感激。现在我在 0 点。