std::wcstok
From cppreference.com
| ヘッダ <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 にはトークンが 1 つしかなく、後続の
- その後、関数はトークンの開始位置へのポインタを返します。
- もし str == nullptr ならば、この呼び出しは
std::wcstokへの後続の呼び出しとして扱われます:関数は、前の呼び出しで停止した場所から、同じ *ptr を使用して続行します。動作は、最後の検出されたトークンの後のワイド文字へのポインタが str として渡された場合と同じです。
- もし str != nullptr ならば、この呼び出しは、この特定のワイド文字列に対する
目次 |
[編集] パラメータ
| 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
[編集] 関連項目
| バイト文字列内の次のトークンを見つける (関数) | |
| C のドキュメント (wcstok)
| |