■strchrを使って文字を左から検索
#include <stdio.h>
#include <string.h>
int main(void){//左から検索
char csv[] = "Jugemu,Jugemu,Goko,no,Surikire" ;
puts(csv);
for(char *p = strchr(csv, ','); p != NULL;p = strchr(p+1,',')){
puts(p);
}
}
CSV形式(Comma Separated Values)の文字列の中から
カンマ”,”をstrchrで左から検索するサンプルコードです。
➡実行結果
./a.out
Jugemu,Jugemu,Goko,no,Surikire
,Jugemu,Goko,no,Surikire
,Goko,no,Surikire
,no,Surikire
,Surikire
■戻り値のNULLチェックをしないで異常終了するかもしれない例
#include <stdio.h>
#include <string.h>
int main(void){//返却値のNULLチェックしないで異常終了する例
char csv[] = "Jugemu,Jugemu,Goko,no,Surikire" ;
puts(csv);
char *p = NULL;
p = strchr(csv,','); puts(p);
p = strchr(p+1,','); puts(p);
p = strchr(p+1,','); puts(p);
p = strchr(p+1,','); puts(p);
p = strchr(p+1,','); puts(p);
}
実務では必ずNULLチェックをしましょう。
対象が csv 形式で必ずカンマがあるはずでも
異常な入力に備えましょう。
➡筆者の環境下での実行結果
./a.out
Jugemu,Jugemu,Goko,no,Surikire
,Jugemu,Goko,no,Surikire
,Goko,no,Surikire
,no,Surikire
,Surikire
Segmentation fault (コアダンプ)
■strrchrを使って文字を右から検索
#include <stdio.h>
#include <string.h>
int main(void){ //右から検索
char csv[] = "Jugemu,Jugemu,Goko,no,Surikire" ;
puts(csv);
for(char *p = strrchr(csv, ','); p != NULL;p = strrchr(csv,',')){
puts(p);
*p = '\0';//検索済みを元データから削除
}
}
CSV形式(Comma Separated Values)の文字列の中から
カンマ”,”をstrrchrで右から検索するサンプルコードです。
➡実行結果
./a.out
Jugemu,Jugemu,Goko,no,Surikire
,Surikire
,no
,Goko
,Jugemu
参考: