(準備中)
------------------------------------------------------------------------------
getsで1行読み込んだ後に区切り記号で分割
------------------------------------------------------------------------------
読み込むデータ数が決まっていない時は,
getsで1行読み込み以下の方法で分割して読み取ります。
Cには読み込んだ1行を区切り記号で分割してトークン化するための関数がないので、
strtok関数で1個づつ読み込んでいきます。
strok関数
char strok(char* str1, const char* str2)
第一引数 str1 文字列
第二引数 str2 区切り文字
戻り値は、分割ができた場合、分割した文字列の先頭アドレスが返ります。
分割できなかった場合はNULLが返ります。
例えば、getsで1行読み込み、空白を区切り記号として分割したいときは、
char str{256], *token;
gets(str);
token=strok(str, " ");
のように書きます。
これで最初の分割した文字を取得しますが、2個目以降を取得する場合の
strok関数の書き方は少し注意が必要です。
続けて2個目以降の分割した文字列の取得を行う時は、第一引数ぬにNULLを指定します。
strok(NULL, " ");
(参考)なお、VB.netやPythonでは、読み込んだ1行を一気に分割するsplit()というメソッドが用意されています。
それぞれ以下のページをご参照下さい。
VB.net 〜 標準入力の小技(分割して入力)
Python〜 標準入力の小技(分割して入力)
空白区切りで文字列を分割
<split0.c>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char s[30],*token;
gets(s);
token=strtok(s," ");
while(token != NULL) {
printf("%s\n",token);
token=strtok(NULL," ");
}
return 0;
}
実行例
c:\bcc55\Bin>split0 This is a book This is a book
c:\bcc55\Bin>split2 1,5,10,50 66 c:\bcc55\Bin>