Namespaces
Variants

std:: wcstok

From cppreference.net
Определено в заголовочном файле <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"A bird came down the walk";
    wchar_t* buffer;
    wchar_t* token = std::wcstok(input, L" ", &buffer);
    while (token)
    {
        std::wcout << token << '\n';
        token = std::wcstok(nullptr, L" ", &buffer);
    }
}

Вывод:

A
bird
came
down
the
walk

Смотрите также

находит следующий токен в байтовой строке
(функция)
C documentation для wcstok