Поиск подстроки в файле - 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. - Поиск продолжается, начиная с симвога после конца найденной подстроки.
- С помощью функции
- Завершение программы:
- Если подстрока не найдена, программа завершается.