Разбить строку на лексемы
#include <string.h>char * strtok( char *s1,const char *s2 );
NULL
, или строка, которую требуется разбить на лексемы.libc
Функция strtok_r() разбивает строку s на последовательность лексем, каждая из которых отделяется символом из строки, на которую указывает s2.
Первый вызов strtok() возвращает указатель на первую лексему в строке s1. Последующие вызовы strtok() должны передавать указатель NULL
в качестве первого аргумента, чтобы получить следующую лексему в строке. Набор разделителей, используемых в каждом из этих вызовов strtok(), может отличаться от одного вызова к другому.
Первый вызов функции ищет в s1 первый символ, который не содержится в текущей строке разделителей s2. Если такой символ не найден, то в s1 нет лексем, и strtok() возвращает указатель NULL
. Если такой символ найден, это начало первой лексемы.
Затем функция strtok() ищет с той же позиции в строке s1 символ, который содержится в текущей строке разделителей. Если такой символ не найден, текущая лексема расширяется до конца строки s1. Если такой символ найден, он заменяется нулевым символом, который завершает текущую лексему. Функция strtok() сохраняет указатель на следующий символ, с которого начнется следующий поиск лексемы, когда первый аргумент является NULL
.
Рекомендуется сохранять копию исходной строки, поскольку 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 системной библиотеки