【问题标题】:C++, getline() cant properly load all charactersC++,getline() 无法正确加载所有字符
【发布时间】: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 点。

标签: c++ get ifstream getline


【解决方案1】:

在 Windows 中,按惯例,Ctrl Z (ASCII 26) 将指示文本结束。

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

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

【讨论】:

  • 我认为我会通过从循环条件中删除 eof 来避免它
猜你喜欢
  • 1970-01-01
  • 2019-10-15
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 2018-12-15
相关资源
最近更新 更多