演習課題「strtok で文字列を分割しよう」
標準入力で . (ドット) 区切りの 3 つの文字列が与えられます。
この文字列を . (ドット) で分割して、出力してください。
※ただし , (カンマ) や スペース で区切ってはいけません
プログラムを実行して、正しく出力できれば演習課題クリアです!
期待する出力値
hello
paiza
learning
#09:strtok で文字列を分割しよう
このチャプターでは、応用編として、strtok (ストラ トック) で文字列を分割する方法について学習します。
#include <stdio.h>
int main(void)
{
char str[] = "hello paiza";
char s1[10];
char s2[10];
sscanf(str, "%s %s", s1, s2);
printf("%s\n", s1);
printf("%s\n", s2);
}
・sscanf で %s を使うと、空白文字以外では分割できません。
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[] = "hello,world,paiza";
char *tp;
tp = strtok(str, ",");
printf("%s\n", tp);
tp = strtok(NULL, ",");
printf("%s\n", tp);
tp = strtok(NULL, ",");
printf("%s\n", tp);
}
strtok を使うと、空白文字以外でも文字列を分割できます。
strtok の 1 つ目の引数は、
1 回目の呼び出しでは、文字列を格納した変数、
2 回目以降の呼び出しでは、NULL
を指定します。
※strtok を使うと、もとの文字列 (ここでは str) は書き換わってしまいます。
このチャプターで作成したコードです。// strtok で文字列を分割しよう
#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[100];
fgets(buf, sizeof(buf), stdin);
char *tp;
tp = strtok(buf, " ,\n");
printf("%s\n", tp);
tp = strtok(NULL, " ,\n");
printf("%s\n", tp);
tp = strtok(NULL, " ,\n");
printf("%s\n", tp);
}
- 初心者のためのポイント C 言語 - strtok
http://www9.plala.or.jp/sgwr-t/lib/strtok.html
- 初心者のためのポイント C 言語 - ポインタ
http://www9.plala.or.jp/sgwr-t/c/sec10.html
- C言語関数辞典 - 空ポインタ(null pointer)
https://webkaru.net/clang/character/