C言語のstrtok()関数とは?文字列をトークンに分割する方法を解説
strtok()関数とは
strtok()関数は、C言語の標準ヘッダーファイル <string.h> に含まれる文字列操作関数の一つです。使用する際は、ソースコードの先頭で以下のようにインクルードします。
#include <string.h>
構文
strtok()関数の構文は以下のとおりです。
char* strtok(char* string, const char* limiter);
第1引数には分割対象の入力文字列 string を、第2引数には区切り文字(デリミタ)limiter を指定します。strtok()は、指定された区切り文字に基づいて文字列を「トークン」と呼ばれる小さな断片へと分割していきます。
戻り値の特徴とNULLの使い方
strtok()からは複数の文字列(トークンのリスト)が得られるように思えますが、実際にこの関数が一度に返すのは1つの文字列だけです。最初に strtok(input, limiter) を呼び出すと、1番目のトークンが返されます。
続くトークンを取得するには、入力文字列として NULL を渡して strtok(NULL, delim) を呼び続けます。そして、戻り値が NULL になった時点で、すべてのトークンを取り出し終えたことを意味します。一般的には、strtok()が NULL を返すまでループ処理で呼び出しを繰り返すのが定石です。
サンプルプログラム
以下は、strtok()関数を使用したC言語プログラムの例です。
#include <stdio.h>
#include <string.h>
int main() {
char input_string[] = "Hello Tutorials Point!";
char token_list[20][20];
char* token = strtok(input_string, " ");
int num_tokens = 0; // トークンリストのインデックス。ここに追加していく
while (token != NULL) {
strcpy(token_list[num_tokens], token); // トークンをリストにコピー
num_tokens++;
token = strtok(NULL, " "); // 次のトークンを取得。入力がNULLになっている点に注意!
}
// トークンのリストを表示
printf("Token List:\n");
for (int i = 0; i < num_tokens; i++) {
printf("%s\n", token_list[i]);
}
return 0;
}
実行結果
上記のプログラムを実行すると、次のような出力が得られます。
Token List: Hello Tutorials Point!
プログラムの解説
この例では、入力文字列として「Hello Tutorials Point!」を用意し、これをスペースで区切ってトークン化しています。
まず strtok(input, " ") を呼び出して最初のトークンを取得します。ここで二重引用符で囲まれた " " が区切り文字であり、1文字の文字列として指定されている点に注意してください。
その後は strtok(NULL, " ") を使い続けることで残りのトークンを順番に取得し、strtok()が NULL を返すまでwhileループで処理を繰り返します。取得した各トークンは strcpy() によって配列 token_list にコピーされ、最後に一覧として表示されます。
注意点:元の文字列は書き換えられる
strtok()は内部で元の文字列を直接書き換える(区切り文字の位置をヌル文字に置き換える)破壊的な動作をするため、元の文字列を後で使いたい場合は、あらかじめ別のバッファにコピーしておく必要があります。また、連続した区切り文字は1つとして扱われる点も覚えておくとよいでしょう。
-
C言語のstrcmp()関数とは?文字列比較の基本と使い方を徹底解説
C言語の標準ライブラリ関数 int strcmp(const char *str1, const char *str2) は、ポインタ str1 が指し示す文字列と、str2 が指し示す文字列を比較するための関数です。C言語において、文字型の配列は「文字列」と呼ばれます。まずは文字列の基本的な扱い方から確認していきましょう。文字列の宣言文字列(文字配列)の宣言は以下のように行います。char stringname [size];例えば、char string[50]; と宣言すれば、最大50文字の長さを持つ文字列を格納できます。文字列の初期化文字列の初期化には、主に次の2つの方法があります。1
-
C言語のstrcpy()関数とは?基本構文と使い方をわかりやすく解説
C言語のライブラリ関数 char *strcpy(char *dest, const char *src) は、src が指し示す文字列を dest にコピーするための関数です。 C言語では、文字の配列のことを「文字列」と呼びます。 文字列の宣言 文字列(文字配列)の宣言は、以下の形式で行います。 char stringname[size]; 例えば char string[50]; と宣言すると、最大50文字の文字列を格納できる配列が確保されます。 文字列の初期化 文字列の初期化には、主に以下の2つの方法があります。 1. 文字定数を使う方法 char string[10] = {H,