名前空間
変種
操作

std::strtok

提供: cppreference.com
< cpp‎ | string‎ | byte
ヘッダ <cstring> で定義
char* strtok( char* str, const char* 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 の区切り文字はトークンごとに異なってもよく、前のトークンの内容に依存することもできます。

[編集]

#include <cstring>
#include <iostream>
 
int main() 
{
    char input[100] = "A bird came down the walk";
    char *token = std::strtok(input, " ");
    while (token != NULL) {
        std::cout << token << '\n';
        token = std::strtok(NULL, " ");
    }
}

出力:

A
bird
came
down
the
walk

[編集] 関連項目

区切り文字集合の任意の文字が文字列中に現れる最初の位置を探します
(関数) [edit]
別のバイト文字列に含まれない文字のみで構成される最も長い先頭部分の長さを返します
(関数) [edit]
別のバイト文字列に含まれる文字のみで構成される最も長い先頭部分の長さを返します
(関数) [edit]