CodeNet / Языки программирования / C / C++ / Linux/Unix / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
strtok
STRTOK #include<string.h> требуется только для объявления функции char *strtor(string1,string2); находит символ в string1 char *string1; строка, содержащая символы char *string2; множество символов-ограничителей Описание. Функция strtok читает строку string1 как множество нуль или более знаков, служащих в качестве ограничителей для символов в string1. Символы в string1 могут отделяться одним или более огра- ничителем от string2. Символы в string1 разрываются столько раз, сколько вызывается strtok. При первом вызове strtok для заданной строки string1, strtok находит первый символ в string1, пропуская предыдущие ограничители. Указатель возвращается на первый знак. Для того, чтобы прочитать следующий символ из string1, функция strtok вызывается вместе с NULL значением для аргумента string1. Аргумент NULL строки string1 вызывает strtok для поиска следующе- го знака в предыдущей строке символов. Множество ограничителей может быть различным от вызова к вызову, так как string2 может принимать любые значения. Замечание. String1 можно модифицировать вызовами strtok, так как после вызова strtok в string1 вставляется нулевое значе- ние ('\0'). Возвращаемое значение. При вызове strtok первый раз, она возвращает указатель на первый символ в string1. При последующих вызовах в этой же самой строке символов, strtok возвращает указатель на следующий символ в строке. Указатель NULL возвращается, когда нет больше символов. Все символы оканчиваются нулем. См. также strcspn, strspn. Пример. #include <string.h> #include <stdio.h> char *string = "a string, of , ,tokens"; . . . /* в следующем цикле собираются символы (отделенные пробе- лами или запятыми) из строки до тех пор, пока в ней ничего не ос- танется */ token = strtok(string,","); while (token !=NULL) { /* вставляет код для обработки символа в цикле */ . . . token = strtok(NULL,","); /* берет следующий символ */ } /* возвращаемыми символами являются "a","string", "of", "tokens". Следующий вызов strtok возвратит NULL и цикл завершает- ся */
Оставить комментарий
Комментарии
1.
5 июня 2014, 06:35:51
Функция strtok выделяет очередную часть строки, на которую указывает аргумент str, отделенную одним из символов разделителей указанных в строке, на которую указывает аргумент sep. Последовательный вызов функции strtok приводит к разбиению строки str на части (лексемы).
При первом вызове функции strtok указывается начало разделяемой строки (str) и начало строки, содержащей разделители (sep). Функция strtok поочередно просматривает символы строки str и ищет первое вхождение символа, не содержащегося в строке разделителей sep. Если символ конца строки встречен раньше чем был найден символ не входящий в строку sep, то разделить строку str на части нельзя и возвращается нулевой указатель (NULL). Если такой символ найден, он считается началом первой части строки str.
Далее функция strtok ищет разделитель, то есть символ, входящий в строку sep. Если такой символ не найден, то считается, что строка str состоит из одной части и последующее разделения строки str будут возвращать нулевой указатель. Если такой символ найден. то он заменяется нулевым символом (символом конца строки). Далее функция strtok запоминает текущую позицию (указатель на символ, с которого будет начинаться поиск следующей части строки) и возвращает указатель на начало первой выделенной части строки.
Если функция strtok вернула не нулевой указатель, можно продолжить разбиение строки str на части. Для продолжения разбиения строки, повторно вызывается функция strtok, но вместо указателя на разбиваемую строку в качестве первого аугмента указывается NULL. В этом случае функция strtok продолжит разбиение с запомненного адреса. Алгоритм разбиения при этом останется тот же.
При первом вызове функции strtok указывается начало разделяемой строки (str) и начало строки, содержащей разделители (sep). Функция strtok поочередно просматривает символы строки str и ищет первое вхождение символа, не содержащегося в строке разделителей sep. Если символ конца строки встречен раньше чем был найден символ не входящий в строку sep, то разделить строку str на части нельзя и возвращается нулевой указатель (NULL). Если такой символ найден, он считается началом первой части строки str.
Далее функция strtok ищет разделитель, то есть символ, входящий в строку sep. Если такой символ не найден, то считается, что строка str состоит из одной части и последующее разделения строки str будут возвращать нулевой указатель. Если такой символ найден. то он заменяется нулевым символом (символом конца строки). Далее функция strtok запоминает текущую позицию (указатель на символ, с которого будет начинаться поиск следующей части строки) и возвращает указатель на начало первой выделенной части строки.
Если функция strtok вернула не нулевой указатель, можно продолжить разбиение строки str на части. Для продолжения разбиения строки, повторно вызывается функция strtok, но вместо указателя на разбиваемую строку в качестве первого аугмента указывается NULL. В этом случае функция strtok продолжит разбиение с запомненного адреса. Алгоритм разбиения при этом останется тот же.
2.
10 января 2011, 23:48:32
При вызове strtok первый раз, она возвращает указатель на первый символ в string1. При последующих вызовах в этой же самой строке символов, strtok возвращает указатель на следующий символ в строке.
НА КАКОЙ СИМВОЛ ТА?? просто на следующий символ в строке? или тот что ищется?
НА КАКОЙ СИМВОЛ ТА?? просто на следующий символ в строке? или тот что ищется?
3.
10 января 2011, 23:46:59
ну и написано же так тяжело!!
4.
9 октября 2009, 03:36:21
тут мелких опечаток штук 5 я насчитал, вот существенная
string1 как множество нуль или
более знаков, служащих в качестве ограничителей для символов в
string1
что она сама в себе ограничители ищет?
string1 как множество нуль или
более знаков, служащих в качестве ограничителей для символов в
string1
что она сама в себе ограничители ищет?
5.
+1 / -0
20 апреля 2006, 14:45:47
Да Вы обалдели! Допустить очипятку в объявлении функции!
char *strtor(string1,string2);
char *strtor(string1,string2);