У меня есть текстовый файл заполнен символами, похожими на эти: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(), но результат был таким же. Кажется, что есть некоторый символ, который обрабатывает/getline can not handle и заставляет его останавливать загрузку следующих символов/строк.
Итак, мой вопрос: есть ли способ заставить getline справиться с этой ситуацией или вообще каким-либо образом найти конкретные слова среди таких странных персонажей?
спасибо.
РЕШИТЬ:
Я открытый файл в двоичном режиме и его работает.
buffer.open("myFile.txt", ios::binary);
Большое спасибо Cheers and hth. - Alf
Я подозреваю, что вы столкнулись с внедренными нулями. –
Вы уверены, что «яблоко» не может появляться дважды в одной строке? – Beta
@Beta Это может быть, но точное число не так важно для меня прямо сейчас. Я был бы все равно благодарен, если бы мог найти хотя бы одно слово. Прямо сейчас я на 0. –