std::strtok
提供: cppreference.com
ヘッダ <cstring> で定義 | ||
char* strtok(char* str, constchar* delim ); | ||
str
の指すヌル終端バイト文字列内の次のトークンを探します。 区切り文字は delim
の指すヌル終端バイト文字列によって表されます。
この関数は同じ文字列から連続するトークンを取得するために複数回呼ばれるように設計されています。
- str !=NULL の場合、その呼び出しはこの特定の文字列に対する
strtok
の初回の呼び出しとして扱われます。delim
に含まれない最初の文字を検索します。
- そのような文字が見つからなかった場合、
str
にはトークンがまったくなく、ヌルポインタが返されます。 - そのような文字が見つかった場合、それは「トークンの開始位置」です。 その位置から
delim
に含まれる最初の文字を検索します。
- そのような文字が見つからなかった場合、
str
はトークンを1個だけ持ち、strtok
の以後の呼び出しはヌルポインタを返します。 - そのような文字が見つかった場合、それはヌル文字 '\0' で置き換えられ、その次の文字を指すポインタが2回目以降の呼び出しのために静的な場所に格納されます。
- そのような文字が見つからなかった場合、
- その後、トークンの開始位置を指すポインタが返されます。
- そのような文字が見つからなかった場合、
- str ==NULL の場合、その呼び出しは
strtok
の2回目以降の呼び出しとして扱われます。 この関数は前回の呼び出しの残りの場所から続きを行います。 前回格納されたポインタが str に渡されたかのように動作します。
目次 |
[編集]引数
str | - | トークン化するヌル終端バイト文字列を指すポインタ |
delim | - | 区切り文字を表すヌル終端バイト文字列を指すポインタ |
[編集]戻り値
次のトークンの開始位置を指すポインタ、またはこれ以上トークンがなければ NULL。
[編集]ノート
この関数は破壊的です。 文字列 str
の要素に '\0' 文字を書き込みます。 特に、文字列リテラルを strtok
の第1引数として使用することはできません。
この関数は呼ぶたびに静的変数を変更します。 スレッドセーフではありません。
他のほとんどのトークナイザと異なり、 strtok
の区切り文字はトークンごとに異なってもよく、前のトークンの内容に依存することもできます。
[編集]例
Run this code
出力:
A bird came down the walk
[編集]関連項目
区切り文字集合の任意の文字が文字列中に現れる最初の位置を探します (関数) | |
別のバイト文字列に含まれない文字のみで構成される最も長い先頭部分の長さを返します (関数) | |
別のバイト文字列に含まれる文字のみで構成される最も長い先頭部分の長さを返します (関数) | |
strtok の C言語リファレンス |