strtok()

Разбить строку на лексемы

Прототип:

#include <string.h>
char * strtok( char *s1,
const char *s2 );

Аргументы:

s1
NULL, или строка, которую требуется разбить на лексемы.
s2
Набор символов, разделяющих лексемы.

Библиотека:

libc

Описание:

Функция strtok_r() разбивает строку s на последовательность лексем, каждая из которых отделяется символом из строки, на которую указывает s2.

Первый вызов strtok() возвращает указатель на первую лексему в строке s1. Последующие вызовы strtok() должны передавать указатель NULL в качестве первого аргумента, чтобы получить следующую лексему в строке. Набор разделителей, используемых в каждом из этих вызовов strtok(), может отличаться от одного вызова к другому.

Первый вызов функции ищет в s1 первый символ, который не содержится в текущей строке разделителей s2. Если такой символ не найден, то в s1 нет лексем, и strtok() возвращает указатель NULL. Если такой символ найден, это начало первой лексемы.

Затем функция strtok() ищет с той же позиции в строке s1 символ, который содержится в текущей строке разделителей. Если такой символ не найден, текущая лексема расширяется до конца строки s1. Если такой символ найден, он заменяется нулевым символом, который завершает текущую лексему. Функция strtok() сохраняет указатель на следующий символ, с которого начнется следующий поиск лексемы, когда первый аргумент является NULL.


Note: Рекомендуется сохранять копию исходной строки, поскольку strtok() может изменить ее.

Возвращаемое значение:

Указатель на найденную лексему или NULL, если лексема не найдена.

Примеры:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( void )
{
char *p;
char *buffer;
char *delims = { " .," };
buffer = strdup( "Find words, all of them." );
printf( "%s\n", buffer );
p = strtok( buffer, delims );
while ( p != NULL )
{
printf( "word: %s\n", p );
p = strtok( NULL, delims );
}
printf( "%s\n", buffer );
return (EXIT_SUCCESS);
}

Код генерирует следующий вывод:

$ ./a.out Find words, all of them. word: Find word: words word: all word: of word: them Find

Классификация:

ANSI, POSIX 1003.1

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Нет

Тематические ссылки:

memchr(), strchr(), strcspn(), strpbrk(), strrchr(), strset(), strspn(), strstr(), strtok_r(), wcschr(), wcscspn(), wcspbrk(), wcsrchr(), wcsspn(), wcsstr(), wcstok()




Предыдущий раздел: Описание API системной библиотеки