サイトマップ / 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言語講座−それ自体コンパイルできる教材を使った講座です−