#include #include /* 文字列s1の中に部分文字列s2があるか調べる */ /* あればその位置のポインタを返し、なければNULLを返す */ char *StrString(const char *s1, const char *s2) { int n; n = strlen(s2); /* 文字列s2の長さを求める */ while (1) { s1 = strchr(s1, s2[0]); /* s2の先頭の1文字を探す */ if (s1 == NULL) /* 見つからなければ */ return (NULL); /* NULLを返す */ if(strncmp(s1, s2, n) == 0) /* 見つかったらn文字比較 */ /* s1はconstを付けて宣言しているのでキャストが必要 */ return (char *)s1; /* 一致したらポインタを返す */ s1++; /* ポインタを進めて */ } /* 次の strchr に備える */ } int main(void) { int n = 0; /* カウンタ */ /* 検索対象の文字列 */ char *s1; char *s2; /* 部分文字列 */ printf("文字列の中から文字列を検索します。\n"); printf("文字列と検索する文字列を入力してください。\n"); printf("文字列:"); scanf("%s", s1); printf("検索する文字列:"); scanf("%s", s2); while ((s1 = StrString(s1, s2)) != NULL) { /* 部分文字列が見つかったら */ n++; /* カウンタを1増やす */ s1 = s1 + strlen(s2); /* 文字列s2の長さだけポインタを進めて */ } /* 次のStrString( )の呼び出しに備える */ if (n == 0) printf("文字列に検索する文字列は見つかりません。\n"); else if (n == 1) printf("文字列に検索する文字列は一つあります。\n"); else printf("文字列に検索する文字列は %d 個あります。\n", n); return 0; }