Реализовать функцию Strtok, разбивающую строку на подстроки - C (СИ)
Формулировка задачи:
В библиотеке string.h имеется функция strtok, которая разделяет строку на несколько строк если между ними есть определенный символ. Например, если строку разделить символом '_', мама_мыла_раму,то получится 3 строки мама, мыла, раму. Нужно реализовать эту функцию самому, но я не знаю как подступиться. Помогите пожалуйста=)
Есть такая мысль, заменить символ-разделитель нулем-терминатором, но вот дальше тупик)
Решение задачи: «Реализовать функцию Strtok, разбивающую строку на подстроки»
textual
Листинг программы
char *f(char *p, char x) { static char *s=NULL; if (p==NULL) { if (s==NULL) return NULL; p = s+1; } s = strchr(p, x); if (s!=NULL) *s = '\0'; return p; } main() { char p[100], *q; strcpy(p, " мама_мыла_раму"); q = f(p, '_'); while(q!=NULL) { printf("%s\n", q); q = f(NULL, '_'); } }
Объяснение кода листинга программы
- char f(char p, char x)
- Функция принимает два аргумента: указатель на строку
p
и символx
. - Если
p
равенNULL
, то возвращаетсяNULL
. - Если
p
не равенNULL
, то ищется следующая подстрока, начинающаяся с символаx
.- Статическое значение
s
инициализируется какNULL
. - Если
s
равенNULL
, то возвращаетсяNULL
. - Значение
s
обновляется таким образом, чтобы указывать на первый символ следующей подстроки. - Если
s
не равенNULL
, то обновляется значениеs
, чтобы указывать на символ, следующий за последним символом текущей подстроки. - Если
s
не равенNULL
, то возвращаетсяp
.
- Статическое значение
- Значение
s
обновляется при каждом вызове функции.
- Функция принимает два аргумента: указатель на строку
- main()
- В функции
main()
объявляется массивp
типаchar
с размером 100 символов. - Строка
мама_мыла_раму
копируется в массивp
. - Переменная
q
инициализируется какNULL
. - Пока
q
не равенNULL
, выполняются следующие действия:- Выводится значение
q
. q
обновляется как результат вызова функцииf(NULL, '_')
.
- Выводится значение
- В конце программы не забудьте выйти из цикла при достижении условия завершения.
- В функции
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д