ホームC言語Tips集文字列 ≫ 文字列を指定文字で分割する

C言語Tips集 - 文字列を指定文字で分割する

文字列を指定文字で分割するには string.hstrtok 関数を使用します.

strtok

#include <string.h>
char *strtok(
    char * restrict s1,
    const char * restrict s2 /* 区切り文字列 */
);

strtok 関数は,s1 が指す文字列を,s2 が指す文字列の中のいずれかの文字で区切られる字句の列に分割する関数です.

strtok 関数は,若干動作にクセがありますので,先にサンプルプログラムを示します.

C言語サンプルプログラム

/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* main */
int main(void) {
    char s1[] = "0055,Ichiro Suzuki,Seattle,090-9999-9999";
    char *code, *name, *address, *tel, *empty;

    /* 1回目の呼出し */
    code = strtok(s1, ",");

    /* 2回目以降の呼出し */
    name = strtok(NULL, ",");
    address = strtok(NULL, ",");
    tel = strtok(NULL, ",");
    empty = strtok(NULL, ",");

    printf("code: %s\n", code);
    printf("name: %s\n", name);
    printf("address: %s\n", address);
    printf("tel: %s\n", tel);
    printf("empty: %s\n", empty);

    return EXIT_SUCCESS;
}

実行例

サンプルプログラムの実行結果は以下のようになります.

code: 0055
name: Ichiro Suzuki
address: Seattle
tel: 090-9999-9999
empty: (null)

解説

strtok 関数は,Perl などの他のプログラム言語の文字列分割関数とは異なり,1 回の呼び出しで複数の分割を行うことができません.文字列の分割は,strtok 関数を呼出すごとに 1 回ずつ行われます.

strtok 関数の 1 回目の呼び出しには,第 1 引数に分割する対象の文字列を指定します.
2 回目以降の呼び出しは,第 1 引数に NULL を指定することで,前回分割された場所の次から分割を開始します. 分割できる文字列がなくなると strtok 関数は NULL を返します.

Cプログラマの必読書

たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.

C実践プログラミング 第3版

C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります. オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.


C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.

文字列の操作