Namespaces
Variants

std:: wcstok

From ja.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 にはトークンが1つしかなく、将来の std::wcstok の呼び出しはヌルポインタを返す。
  • そのようなワイド文字が見つかった場合、それはヌルワイド文字 L ' \0 ' で 置換 され、パーサーの状態(通常は次のワイド文字へのポインタ)がユーザー提供の位置 * ptr に保存される。
  • その後、関数はトークンの開始位置へのポインタを返す。
  • str == nullptr の場合、 std::wcstok の後続の呼び出しとして扱われる:関数は同じ * ptr を使用して、前回の呼び出しで中断した位置から処理を継続する。この動作は、最後に検出されたトークンの次のワイド文字へのポインタが str として渡された場合と同じである。

目次

パラメータ

str - トークン化するヌル終端ワイド文字列へのポインタ
delim - 区切り文字を識別するヌル終端ワイド文字列へのポインタ
ptr - wchar_t * 型のオブジェクトへのポインタ。wcstokが内部状態を保存するために使用

戻り値

次のトークンの先頭へのポインタ、またはこれ以上トークンがない場合はヌルポインタ。

注記

この関数は破壊的です:文字列 str の要素に L ' \0 ' 文字を書き込みます。特に、ワイド文字列リテラルを 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

関連項目

バイト文字列内の次のトークンを検索する
(関数)