1. Strtokプロトタイプとアプリケーション
原型:char * strtok(char * src、const char * delim);
関数:delim(区切り文字列)に従ってsrc(元の文字列)を異なる部分文字列に分解します(継続的に1を数えます)
戻り値:現在分割されている部分文字列に属し、現在分割されている部分文字列がない場合はNULLを返します。
#include <stdio.h>
#include <string.h>
int main(void) {
char s[] = "hello, world! welcome to china!";
char delim[] = " ,!";
char *token;
for(token = strtok(s, delim); token != NULL; token = strtok(NULL, delim)) {
printf(token);
printf("+");
}
printf("\n");
return 0;
}
输出:hello + word + welcome + to + china +
2. Strsepプロトタイプとアプリケーション
プロトタイプ:char * strsep(char * src; const char * delim);
関数:delim(区切り文字列)に従ってsrc(元の文字列)を異なる部分文字列に分解します(区切り文字列の1対1の置換)
戻り値:現在分割されている部分文字列に属し、現在分割されている部分文字列がない場合はNULLを返します。
#include <stdio.h>
#include <string.h>
int main(void) {
char source[] = "hello, world! welcome to china!";
char delim[] = " ,!";
char *s = strdup(source);
char *token;
for(token = strsep(&s, delim); token != NULL; token = strsep(&s, delim)) {
printf(token);
printf("+");
}
printf("\n");
return 0;
}
出力:hello ++ word ++ welcome + to + china +;
注:主な違いは、区切り文字列が複数の文字で構成され、元の文字列に連続して表示される場合(たとえば、delimの場合、元の文字列に連続する「 "、"! ")、Strtokは一度に '\ 0'に置き換えられ、strsepは1つずつ置き換えられます。複数の分割文字が連続している場合、" "などの空の文字列を1つずつ返すため、strsepを使用する必要がある場合戻り値が空文字列であると判断してください。