<<<На главную
Поиск посимвольный на языке C.
Программа ищет слово или сочетание. Учитывает регистр.
Возвращает найденные сочетания в файле, их количество,
номер последнего символа, номер строки и отрывок текста,
следующий за сочетанием.
#include < stdio.h>
#include < stdlib.h>
#include < string.h>
/*
* Эта программа читает файл по одному символу, и ищет слово в тексте
* Первый аргумент - имя файла, второй - строка
* */
int main (int argc, char *argv[])
{
if (argc < 3) {
printf("poisk ИМЯ ФАЙЛА СЛОВО\n");
return 0;
}
if (fopen(argv[1], "r") == NULL) {
printf("Неправильное имя файла\n");
return 0;
}
int i = 0;
int x = 0;
int z = 0;
int y = 1;
char str[60];
char c;
char *string = argv[2];
for (z = 0; string[z] != '\0'; z++);
FILE *file;
file = fopen(argv[1], "r");
while (1)
{
c = getc (file);
//printf("\033[0m%c", c);
if (c == EOF)
break;
/*Если символ в строке не равен символу из файла, то обнулим x*/
if (argv[2][x]!=c)
x=0;
/*Если символ искомой строки равен символу из файла, то увеличим x*/
if (argv[2][x]==c)
x++;
if (c == '\n')
y++;
/*Если x равен длине искомой строки, то печатаем. Заодно выводим
номер последнего символа. Потом продолжим поиск*/
if (x==z) {
x=0;
i++;
printf ("\n \033[34m Сочетание найдено: \033[33m");
printf ("%s", string);
printf (", \033[34m позиция символа: ");
printf("%c", string[z-1]);
printf(" %ld\n", ftell(file));
printf("\n Номер строки: %d", y);
fgets(str, 60, file);
printf(" \033[0m %s\n", str);
continue;
}
}
fclose(file);
printf("\n \033[33m Всего совпадений: %d \n", i);
}