<<<На главную

Поиск посимвольный на языке 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);
}