Я пишу программу, которая открывает два файла для чтения: первый файл содержит 20 имен, которые я храню в массиве вида Names[0] = John\0
. Второй файл представляет собой большой текстовый файл, содержащий множество вхождений каждого из 20 имен.
Мне нужно, чтобы моя программа сканировала весь второй файл, и каждый раз, когда она находит одно из имен, переменная Count
увеличивается, и поэтому по завершении программы общее количество всех имен, появляющихся в тексте, сохраняется в Count
.
Вот мой цикл, который ищет и подсчитывает количество вхождений имени:
char LineOfText[85];
char *TempName;
while(fgets(LineOfText, sizeof(LineOfText), fpn)){
for(a = 0; a<NumOfNames; a++){
TempName = strstr(LineOfText, Names[a]);
if(TempName != NULL){
Count++;
}
}
}
Что бы я ни делал, этот цикл не работает так, как я ожидал, но я обнаружил, что не так (я думаю!). Моя проблема в том, что каждое имя в массиве завершается NULL, но когда имя появляется в текстовом файле, оно не завершается NULL, если только оно не встречается как последнее слово строки. Таким образом, этот цикл while
подсчитывает только количество появлений любого из имен в конце строки, а не количество появлений любого из имен в любом месте текстового файла. Как я могу настроить этот цикл для борьбы с этой проблемой?
Спасибо за любой совет заранее.
The terminating null bytes ('\0') are not compared.
- person Sourav Ghosh   schedule 05.05.2015strstr
просто дает вам информацию, если в этой строке есть хотя бы один, а не фактическое число, поэтому вы увеличиваете только один раз для строки, содержащейJohn
дважды - person Eregrith   schedule 05.05.2015Names[a]
- person Sourav Ghosh   schedule 05.05.2015TempName != NULL
, а затем просматривал каждую из этих строк в файле. Все они содержали имя в самом конце. Вот ссылка на текстовый файл, чтобы вы могли увидеть, как он отформатирован: drive.google.com/file/d/0B7qDUDai7YloOU9lQlA1QTNqOHM/ - person KOB   schedule 05.05.2015