Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で文字列をトークン化する方法|strtok関数の使い方を徹底解説

C言語における文字列のトークン化とは

この記事では、C言語で文字列をトークン化(分割)する方法について解説します。C言語の標準ライブラリには、この目的のための関数として strtok が用意されています。

strtok 関数は、指定された区切り文字(デリミタ)を使って、元の文字列を一連の小さな文字列(トークン)へと分割します。

strtok関数のプロトタイプ宣言

char *strtok(char *str, const char *delim);

パラメータ

  • str:分割対象となる文字列です。この文字列の内容は関数によって直接書き換えられ、小さなトークンへと分割されます。
  • delim:区切り文字を含むC文字列です。呼び出しごとに異なる区切り文字を指定することも可能です。

戻り値

文字列から見つかった最初のトークンへのポインタを返します。これ以上取得できるトークンが残っていない場合は、NULLポインタが返されます。

サンプルコード

#include <string.h>
#include <stdio.h>

int main () {
    char str[80] = "This is - www.tutorialspoint.com - website";
    const char s[2] = "-";
    char *token;

    /* 最初のトークンを取得 */
    token = strtok(str, s);

    /* 残りのトークンを順番に取り出して表示 */
    while( token != NULL ) {
        printf( " %s\n", token );
        token = strtok(NULL, s);
    }
    return(0);
}

実行結果

This is
www.tutorialspoint.com
website

プログラムの流れを解説

まず strtok(str, s) を呼び出して、最初のトークンを取得します。その後は第一引数に NULL を渡して strtok(NULL, s) を呼び続けることで、前回の続きから次のトークンを順番に取り出せます。すべてのトークンを取得し終えると NULL が返されるため、それを while ループの終了条件として利用しています。

strtok関数を使用する際の注意点

  • 元の文字列が破壊される:strtokは引数として渡された文字列を直接書き換えます。元の文字列を後で使いたい場合は、あらかじめコピーを取っておきましょう。
  • 連続する区切り文字は1つとして扱われる:区切り文字が連続していても、空のトークンは生成されません。
  • スレッドセーフではない:内部に静的な状態を持つため、マルチスレッド環境では代替関数である strtok_r の使用が推奨されます。

まとめ

C言語で文字列を区切り文字ごとに分割したい場合は、標準ライブラリの strtok 関数が便利です。最初の呼び出しで元の文字列を渡し、以降は NULL を渡して呼び出すだけで、すべてのトークンを簡単に取得できます。ただし、元の文字列が変更される点やスレッドセーフではない点には注意して使用しましょう。

  1. C言語のstrcmp()関数とは?文字列比較の基本と使い方を徹底解説

    C言語の標準ライブラリ関数 int strcmp(const char *str1, const char *str2) は、ポインタ str1 が指し示す文字列と、str2 が指し示す文字列を比較するための関数です。C言語において、文字型の配列は「文字列」と呼ばれます。まずは文字列の基本的な扱い方から確認していきましょう。文字列の宣言文字列(文字配列)の宣言は以下のように行います。char stringname [size];例えば、char string[50]; と宣言すれば、最大50文字の長さを持つ文字列を格納できます。文字列の初期化文字列の初期化には、主に次の2つの方法があります。1

  2. 【PHP入門】highlight_string()関数の使い方とサンプルコード解説

    highlight_string()関数は、PHPの構文をハイライト(色分け)表示した状態で文字列を出力する組み込み関数です。PHPコードのサンプルを見やすく表示したい場合などに便利で、チュートリアルサイトやドキュメント作成によく活用されています。 構文 highlight_string(string, return) パラメータ string − ハイライト表示したい文字列を指定します。文字列中にPHPタグ(<?php ?>)が含まれていると、その部分がPHP構文として解析され、色分け表示されます。 return − このパラメータにtrueを設定す