Реализовать функцию 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, '_').
- Выводится значение
- В конце программы не забудьте выйти из цикла при достижении условия завершения.
- В функции