C言語において文字列を分割する方法は様々です。
この記事では、strtok 関数を使用せずに文字列を分割する方法と同じ処理を strtok 関数を使って行う方法について解説します。
これにより文字列処理における基本的な考え方を理解しやすくなります。
strtokを使わないで文字列を分割する
C言語において、文字列を分割する一般的な手法は元の文字列を一文字ずつ見ていきながら特定の区切り文字を検出することです。
以下に、この手法を実現する簡単なコード例を示します。
#include <stdio.h>
void splitString(const char source[], char delimiter) {
printf("Splitting string using delimiter '%c'\n", delimiter);
int i = 0;
while (source[i] != '#include <stdio.h>
void splitString(const char source[], char delimiter) {
printf("Splitting string using delimiter '%c'\n", delimiter);
int i = 0;
while (source[i] != '\0') {
if (source[i] == delimiter) {
printf("\n");
} else {
printf("%c", source[i]);
}
i++;
}
printf("\n");
}
int main() {
char source[] = "C,Programming,Language";
// 文字列の分割
splitString(source, ',');
return 0;
}
') {
if (source[i] == delimiter) {
printf("\n");
} else {
printf("%c", source[i]);
}
i++;
}
printf("\n");
}
int main() {
char source[] = "C,Programming,Language";
// 文字列の分割
splitString(source, ',');
return 0;
}
この例では、splitString 関数を用いて文字列をコンマ , で分割しています。
区切り文字を検出すると改行しそれ以外の場合は文字を表示します。
strtokを利用して文字列分ける
C言語の標準ライブラリには文字列を指定した区切り文字で分割するための strtok 関数が用意されています。
以下は、この関数を使用した文字列分割の例です。
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "C,Programming,Language";
char* token;
// strtok関数を使用した文字列の分割
token = strtok(source, ",");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, ",");
}
return 0;
}
strtok 関数を使うと指定した区切り文字で文字列を分割できます。
注意が必要なのは元の文字列 (source) が strtok 関数によって変更されるため元の文字列を保持しておく必要があることです。
広告
まとめ
文字列の分割には strtok 関数を使用することで簡潔に処理できますが注意点がいくつかあります。
特に元の文字列が変更されるため注意深く扱う必要があります。
もちろん、strtok を使わずに手動で分割する方法も理解しておくとより深い理解が得られるでしょう。
文字列処理は基本的な概念を理解しておくことが大切です。