strtok – разбиение строки на части по указанному разделителю.
Синтаксис:
#include < string.h >
char *strtok(char *str, const char *sep);
Аргументы:
str – указатель на разбиваемую строку.
sep – указатель на строку, содержащую набор символов разделителей.
Возвращаемое значение:
NULL – если строку str невозможно разделить на части.
Указатель на первый символ выделенной части строки.
Описание:
Функция strtok выделяет очередную часть строки, на которую указывает аргумент str, отделенную одним из символов разделителей указанных в строке, на которую указывает аргумент sep. Последовательный вызов функции strtok приводит к разбиению строки str на части (лексемы).
«При первом вызове функции strtok указывается начало разделяемой строки (str) и начало строки, содержащей разделители (sep). В начале функция strtok поочередно просматривает символы строки str и ищет символ, не содержащейся в строке разделителей sep. Если в строке str символ конца строки встречен раньше, чем был найден символ не входящий в строку sep, то разделить строку str на части нельзя и возвращается нулевой указатель (NULL). Если такой символ найден, он считается началом первой части строки str.»
Далее функция strtok ищет разделитель, то есть символ, входящий в строку sep. Если такой символ не найден, то считается, что строка str состоит из одной части и последующее разделения строки str будут возвращать нулевой указатель. Если такой символ найден. то он заменяется нулевым символом (символом конца строки). Далее функция strtok запоминает текущую позицию (указатель на символ, с которого будет начинаться поиск следующей части строки) и возвращает указатель на начало первой выделенной части строки.
Если функция strtok вернула не нулевой указатель, можно продолжить разбиение строки str на части. Для продолжения разбиения строки, повторно вызывается функция strtok, но вместо указателя на разбиваемую строку в качестве первого аугмента указывается NULL. В этом случае функция strtok продолжит разбиение с запомненного адреса. Алгоритм разбиения при этом останется тот же.
Пример:
В примере, в строка «test1/test2/test3/test4» разбивается на части по разделителю “/” с помощью функции strtok. Результат разбиения выводится на консоль.
#include < stdio.h > // Для printf
#include < string.h > // Для strtok
int main (void)
{
// Массив со строкой для поиска
char str [24]=” test1/test2/test3/test4”;
// Набор символов, которые должны входить в искомый сегмент
char sep [10]=”/”;
// Переменная, в которую будут заноситься начальные адреса частей
// строки str
char *istr;
printf (“Исходная строка: %s\n“, str);
printf (“Результат разбиения:\n“);
// Выделение первой части строки
istr = strtok (str,sep);
// Выделение последующих частей
while (istr != NULL)
{
// Вывод очередной выделенной части
printf (“%s\n”,istr);
// Выделение очередной части строки
istr = strtok (NULL,sep);
}
return 0;
}
| |
Результат:
Вывод в консоль:
Исходная строка: test1/test2/test3/test4
Результат разбиения:
test1
test2
test3
test4
|
Смотри так же:
strtok
strtok_r
|