std::wcstok
| Определено в заголовочном файле <cwchar>
|
||
wchar_t* wcstok( wchar_t* str, const wchar_t* delim, wchar_t ** ptr); |
||
Находит следующий токен в широкой строке с нулевым завершающим символом, на которую указывает str. Символы-разделители идентифицируются широкой строкой с нулевым завершающим символом, на которую указывает delim.
- Если
str != nullptr, вызов рассматривается как первый вызовstd::wcstokдля этой конкретной широкой строки. Функция ищет первый широкий символ, который не содержится вdelim.
- Если такой широкий символ не найден, то в
strвообще нет токенов, и функция возвращает нулевой указатель. - Если такой широкий символ был найден, это начало токена. Затем функция с этого места ищет первый широкий символ, который содержится в
delim.
- Если такой широкий символ не найден,
strимеет только один токен, и будущие вызовыstd::wcstokбудут возвращать нулевой указатель. - Если такой широкий символ был найден, он заменяется нулевым широким символом
L'\0', а состояние анализатора (обычно указатель на следующий широкий символ) сохраняется в предоставленном пользователем местоположении*ptr.
- Если такой широкий символ не найден,
- Затем функция возвращает указатель на начало токена.
- Если такой широкий символ не найден, то в
- Если
str == nullptr, вызов рассматривается как последующий вызовstd::wcstok: функция продолжает работу с того места, где она остановилась при предыдущем вызове, с тем же*ptr. Поведение такое же, как если бы указатель на широкий символ, следующий за последним обнаруженным токеном, был передан какstr.
- Если
Параметры
| str | — | указатель на широкую строку с нулевым завершающим символом для токенизации |
| delim | — | указатель на широкую строку с нулевым завершающим символом, определяющую разделители |
| ptr | — | указатель на объект типа wchar_t*, который используется wcstok для хранения своего внутреннего состояния
|
Возвращаемое значение
Указатель на начало следующего токена или нулевой указатель, если токенов больше нет.
Примечание
Эта функция деструктивна: она записывает символы L'\0' в элементы строки str. В частности, широкий строковый литерал не может использоваться в качестве первого аргумента std::wcstok.
В отличие от std::strtok, эта функция не обновляет статическое хранилище: она сохраняет состояние анализатора в указанном пользователем месте.
В отличие от большинства других токенизаторов, разделители в std::wcstok могут быть разными для каждого последующего токена и даже зависеть от содержимого предыдущих токенов.
Пример
#include <cwchar>
#include <iostream>
int main()
{
wchar_t input[100] = L"Птица спустилась по дорожке";
wchar_t* buffer;
std::wcout.imbue(std::locale("en_US.utf8"));
wchar_t* token = std::wcstok(input, L" ", &buffer);
while (token)
{
std::wcout << token << '\n';
token = std::wcstok(nullptr, L" ", &buffer);
}
}
Вывод:
Птица
спустилась
по
дорожке
Смотрите также
| находит следующий маркер в строке байтов (функция) | |
Документация C по wcstok
| |