C++,getline() 无法正确加载所有字符
C++, getline() cant properly load all characters
我的文本文件中填充了与这些类似的字符:
¶§čç†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() 函数,但结果是一样的。似乎有一些字符 get/getline 无法处理并强制它停止加载下一个 characters/lines。
所以我的问题是:有什么方法可以强制 getline 处理这种情况,或者通常有什么方法可以在这种奇怪的字符中找到特定的单词?
谢谢。
已解决:
我已经以二进制模式打开该文件,现在可以正常工作了。
buffer.open("myFile.txt", ios::binary);
非常感谢干杯和hth。 - 阿尔夫
在 Windows 中,按惯例,Ctrl Z (ASCII 26) 表示文本结束。
为避免这种情况,请以二进制文件打开文件。
或使用较低级别的二进制文件i/o。
我的文本文件中填充了与这些类似的字符:
¶§čç†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() 函数,但结果是一样的。似乎有一些字符 get/getline 无法处理并强制它停止加载下一个 characters/lines。
所以我的问题是:有什么方法可以强制 getline 处理这种情况,或者通常有什么方法可以在这种奇怪的字符中找到特定的单词?
谢谢。
已解决:
我已经以二进制模式打开该文件,现在可以正常工作了。
buffer.open("myFile.txt", ios::binary);
非常感谢干杯和hth。 - 阿尔夫
在 Windows 中,按惯例,Ctrl Z (ASCII 26) 表示文本结束。
为避免这种情况,请以二进制文件打开文件。
或使用较低级别的二进制文件i/o。