Поиск подстроки в файле - C (СИ) (77123)
Формулировка задачи:
вводная: получаем строку динамической длины в буфер
задачка: скопировать в (пускай будет файл) все, что будет между 2 точками совпадения.
для примера. есть строка цуываываыва%$ sdfsdfsdfsdfsdfsdf&* sdfsdfsdfsdf %$sdfsdfsdfsdfsdf sdf &*sdfsdfsdfsdf
нужно получить куски текста, что находятся между %$.......&*. Остальное в /dev/null
Решение задачи: «Поиск подстроки в файле»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #define PAT_BEG "%$" #define PAT_END "&*" int main(int argc, char *argv[]) { const char *beg, *end; const size_t beg_len = strlen(PAT_BEG); const size_t end_len = strlen(PAT_END); if(argc != 2) { fprintf(stderr, "Usage: %s STRING\n", argv[0]); exit(1); } for(beg = strstr(argv[1], PAT_BEG); beg != NULL && (end = strstr(beg + beg_len, PAT_END)) != NULL; beg = strstr(end + end_len, PAT_BEG)) printf("%.*s\n", end - beg - beg_len, beg + beg_len); exit(0); }
Объяснение кода листинга программы
В этом коде осуществляется поиск подстроки в файле.
- Переменные:
beg
- указывает на начало подстроки в строке.end
- указывает на конец подстроки в строке.beg_len
- длина подстроки, которую ищем, начиная с первого символа.end_len
- длина подстроки, которую ищем, начиная с последнего символа.
- Первые действия:
- Проверка количества аргументов в командной строке. Если их меньше двух, выводится сообщение об ошибке и программа завершается.
- Цикл поиска:
- С помощью функции
strstr
начинается поиск подстроки, начиная с первого символа переданной строки. - Если подстрока найдена, ищется конец подстроки с помощью той же функции
strstr
, но уже с указанием смещения от найденной позиции. - Если конец подстроки найден, выводится найденная подстрока с помощью формата
printf
. - Поиск продолжается, начиная с симвога после конца найденной подстроки.
- С помощью функции
- Завершение программы:
- Если подстрока не найдена, программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д