サイトマップ / C言語講座出入り口総目次目次:関数>トークンの取り出し

青い直線

トークンの取り出し

青い直線

[sizeof( )演算子]←このソース→[平均と標準偏差]

/* トークン */

/* コンパイラはソースプログラムを分解してからそれを解析します。分解の最小単位をトークン(token)といいます。文字列をトークンに分解するには、標準ライブラリ関数strtok( )を使います。

    #include <string.h>
    char *strtok(char *s, const char *t);

    例:p = strtok(s, t);

    実行結果    戻り値
    成功	       トークンへのポインタ
    失敗        NULL

strtok( )は最初の引数で指定された文字列を、2番目の引数で指定された区切り文字をもとに、トークンに分解します。区切り文字は複数指定できます。2度目以降のstrtok( )の呼び出しは、最初の引数をNULLポインタにします。

ポインタについては後の学習で詳しく説明しますが、戻り値がトークンへのポインタとは、トークンのあるメモリのアドレスが返ってくるということです。NULLポインタはどのアドレスも指していないポインタです。

2度目以降のstrtok( )の呼び出しで2番目の引数を変更することは可能です。

ソースプログラムの説明

ソースプログラムでは、スペースとカンマを区切り文字に指定し、文字列からトークンを取り出します。取り出したデータは2次元の配列animal[ ][ ]にしまいます。配列の大きさは記号定数で指定しています。ヌル文字も含めて、20文字までの文字列を、10までしまうことができます。

1度目は下記のように呼び出します。

    strtok(zoo, token);

2度目以降は最初の引数にNULLを指定します。animal[0]は2次元配列の最初の文字列を指すポインタです。

    strcpy(animal[0], strtok(zoo, token));

上記のコードで、strtok( )が成功すれば、最初のトークンへのポインタが返ってきます。それを配列へコピーします。 */

/* ここからソースプログラム */

#include <stdio.h>
#include <string.h>             /* strtok(  ) と strcpy(  ) に必要 */

#define NUM_DATA 10
#define LEN_DATA 20
                                /* トークンを取り出す文字列 */
char zoo[] = "Cat, Dog, Tiger, Bug, Bird, Fish, Seep, Cow, Pig, Rat";

void main( void );

void main( void )
{                                /* トークンをしまう2次元配列 */
    char animal[NUM_DATA][LEN_DATA];
    char *token = " ,";          /* 区切り文字はスペースとカンマ */
    int i;

    printf("オリジナル:\t");
    printf("%s\n\n", zoo);       /* トークンを取り出す文字列を表示 */

    printf("取り出したトークン:\n");
                                              /* strtok(  ) の */
    strcpy(animal[0], strtok(zoo, token));    /* 1度目の呼び出し */

    printf("%s\t", animal[0]);

    for (i = 1;  i < NUM_DATA; i++) {                 /* 2度目以降の呼び出しは */
        strcpy(animal[i], strtok(NULL, token));       /* 最初の引数にNULLを指定 */
        printf("%s\t", animal[i]);
    }
}

/* ここまでソースプログラム */

[sizeof( )演算子]←このソース→[平均と標準偏差]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:関数>トークンの取り出し