Ваша программа ищет все вхождения строки в файле, строка за строкой.
Например, строка aa
присутствует 3 раза в строке aaaa
. Это предполагаемое поведение?
Если в файле очень длинные строки, которые читаются по частям с помощью fgets()
, вы все равно можете получить правильный счет, скопировав конец буфера в начало буфера и прочтите следующую часть после этого:
#include <stdio.h>
#include <string.h>
int main() {
FILE *fptr;
int len, count, index, overlap;
char name[100], word[25], buffer[100];
char *pos;
printf("Enter the word to be found: ");
if (scanf("%24s", word) != 1)
return 1;
len = strlen(word);
printf("Enter the file name: ");
if (scanf("%99s", name) != 1)
return 1;
fptr = fopen(name, "r");
if (fptr == NULL) {
printf("Problem with opening the file\n");
return 1;
}
overlap = 0;
count = 0;
while (fgets(buffer + overlap, sizeof(buffer) - overlap, fptr) != NULL) {
index = 0;
while ((pos = strstr(buffer + index, word)) != NULL) {
index = (pos - buffer) + 1;
count++;
}
overlap = 0;
if (strlen(buffer) == sizeof(buffer) - 1 && buffer[sizeof(buffer) - 2] != '\n') {
// line was split
memmove(buffer, buffer + sizeof(buffer) - len, len);
overlap = len - 1;
}
}
printf("The word %s is found %d times\n", word, count);
fclose(fptr);
return 0;
}