—правочник по C/C++
strtok()

#include <string.h>
char *strtok(char *str1, const char *str2);

ќписание

¬озвращает указатель на следующую лексему в строке

‘ункци€ strtok() возвращает указатель на следующую лексему в строке, адресуемой параметром str1. —имволы, образующие строку, адресуемую параметром str2, представл€ют собой разделители, которые определ€ют лексему. ѕри отсутствии лексемы, подлежащей возврату, возвращаетс€ нулевой указатель.

¬ версии —99 к параметрам str1 и str2 применен квалификатор restrict.

„тобы разделить некоторую строку на лексемы, при первом вызове функции strtok() параметр str1 должен указывать на начало этой строки. ѕри последующих вызовах функции в качестве параметра str1 нужно использовать нулевой указатель. ¬ этом случае полна€ строка будет модифицироватьс€ при каждом вызове функции.

ѕри каждом обращении к функции strtok() можно использовать различные наборы разделителей лексем.

—овет программисту

‘ункци€ strtok() предоставл€ет средство, позвол€ющее сократить строку до составл€ющих ее частей. Ќапример, следующа€ программа раздел€ет на лексемы строку "One, two, and three".

#include <stdio.h>
#include <string.h>
int main(void)
	char *p;
	
	p = strtok("One, two, and three.", ",");
	printf(p);
	do {
		p = strtok(NULL, ",. ");
		if(p) printf("|%s", p);
	} while(p),
	
	return 0;
}

–езультат работы этой программы имеет следующий вид.

One | two | and | three

ќбратите внимание, как функци€ strtok() сначала вызываетс€ с исходной строкой, но в последующих ее вызовах в качестве первого аргумента используетс€ значение NULL. ‘ункци€ strtok() поддерживает внутренний указатель обрабатываемой строки. ≈сли первый аргумент функции strtok() указывает на строку, внутренний указатель устанавливаетс€ в начало этой строки. ≈сли первый аргумент равен значению NULL, функци€ strtok() продолжает процесс обработки предыдущей строки, начина€ с позиции, запомненной на предыдущем шаге, и продвигает внутренний указатель по мере получени€ очередной лексемы. “аким образом, функци€ strtok() "проходит" всю строку. “акже обратите внимание на то, как измен€етс€ строка, задающа€ разделители, при первом и последующих вызовах функции. ѕри каждом вызове разделители могут определ€тьс€ по-разному.






–Э–µ—В –Ї–Њ–Љ–Љ–µ–љ—В–∞—А–Є–µ–≤.



–Ю—Б—В–∞–≤–Є—В—М –Ї–Њ–Љ–Љ–µ–љ—В–∞—А–Є–є:
–Т–∞—И–µ –Ш–Љ—П:
Email:
–Р–љ—В–Є–±–Њ—В: *  
–Т–∞—И –Ї–Њ–Љ–Љ–µ–љ—В–∞—А–Є–є: