○区切り文字による文字列の切り出し
■strtokによる文字列切り出し
注意
strtokは、先頭に区切り文字が無いとエラーが出ますので追加します。
区切り文字が連続した場合に読み飛ばして一つにしてしまいます。
そのため値が無い区切り文字が含まれるとバグを作りこみます。
#include <stdio.h>
#include <string.h>
int main(){
//strtokは、先頭に区切り文字が無いとエラーが出ますので追加します。
char*str="aa,bb,cc,dd,ee,ff";
char strPos[128];
strPos[0]=',';
strcpy(strPos+1,str);
//この時点でstrPosの内容は",aa,bb,cc,dd,ee,ff"になります
char*r;
r=strtok(strPos,",");//一文字目を切り出します。
printf("%s\n",r);
while(r=strtok(NULL,",")){//次の文字を切り出します。無ければNULLを返します。
printf("%s\n",r);
}
return 0;
}
▼出力結果
aa
bb
cc
dd
ee
ff
■ライブラリを使わずに行う
strtokみたいに複数の文字を区切り文字にしたりは出来ないですが、一つの文字での切り出しは出来ます
区切り文字の間に値が無い場合には空白文字を切り出します。
先頭に区切り文字は必要ないです。
#include <stdio.h>
char* str_split(char*buf,char c){
static char*_buff;
if(buf) _buff=buf;//バッファに文字列が来たら保存する
if('\0' == *_buff) return NULL; //バッファの先頭が終端文字だとNULLを返す
char*head = _buff;//先頭の位置を保存する
while(*_buff){
if(c == *_buff){
*_buff='\0';
_buff++;
break;
}
_buff++;
}
return head;
}
int main()
{
char*str="a,b,,,c,d,今日は,晴天";
char*r;
r=str_split(str,',');//一文字目を切り出します。
printf("[ %s ]\n",r);
while(r=str_split(NULL,',')){//次の文字を切り出します。無ければNULLを返します。
printf("[ %s ]\n",r);
}
return 0;
}
▼実行結果
[ a ]
[ b ]
[ ]
[ ]
[ c ]
[ d ]
[ 今日は ]
[ 晴天 ]
▲トップページ
>
Windows と C++