Как работает функция strtok? - C (СИ)
Формулировка задачи:
Закоментите пожалуйста
char *mystrtok(char * buf, const char * delim)
{
static char * H, * T, * R;
if (buf)
{
H = buf;
T = H + strlen(H);
for (R = H; R < T; ++R)
if (strchr(delim, *R))
*R = 0;
}
while (! *H && H < T)
++H;
if (H >= T)
return NULL;
else
{
R = H;
H += strlen(H);
}
return R;
}Решение задачи: «Как работает функция strtok?»
textual
Листинг программы
/*char *mystrtok(char * buf, const char * delim)
{
static char * H, * T, * R;
if (buf)
{
H = buf;
T = H + strlen(H);
for (R = H; R < T; ++R)
if (strchr(delim, *R))
*R = 0;
}
while (! *H && H < T)
++H;
if (H >= T)
return NULL;
else
{
R = H;
H += strlen(H);
}
return R;
}*/
Объяснение кода листинга программы
В данном коде реализована функция mystrtok, которая работает аналогично функции strtok, но с некоторыми отличиями. Функция принимает два аргумента: буфер с данными и разделитель.
- Создаются три указателя: H, T и R.
- Если буфер не равен NULL, то H становится указателем на начало строки, а T — на конец строки.
- Для каждого символа в строке проверяется, является ли он разделителем. Если да, то этот символ заменяется на 0.
- Если в строке не осталось символов, то возвращается NULL.
- Если в строке остались символы, то возвращается указатель на первый символ. Таким образом, функция mystrtok разбивает строку на токены (подстроки), используя заданный разделитель.