Spec-Zone.ru › C++

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"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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/wide/wcstok

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API