ベストアンサー
~プログラム例~ #include <stdio.h> int saがsbで始まっている(const char sa[] , const char sb[]) { for (;;) { if (*sb == '\0') return 1; else if (*sb == *sa) { ++sa; ++sb; } else return 0; } } int sa中にsbが出現する(const char sa[] , const char sb[]) { for (;;) { if (saがsbで始まっている(sa, sb)) return 1; else if (*++sa == '\0') return 0; } } int main() { char sentence[] = "This is a pen. That is an apple."; for (;;) { char str[sizeof sentence]; if (scanf("%s", str) == 1) { static const char* const a[] = { "含まれていない" , "含まれている" }; printf("→%s\n", a[sa中にsbが出現する(sentence, str)]); } else break; } } 《解説》 まず、長い文字列 sa が短い文字列 sb で始まっている…かどうかを判定する関数を作りました。この関数 sa が sb で始まっていると 1、そうではない場合は 0、を返します。 次に、sa中にsbが出現する…かどうかを判定する関数を作りました。この関数はsa中でsbを発見すると1、最後まで探しても見つからなかったときは0、を返します。 この関数を main から呼び出し、結果として得た 1 か 0 を用いて配列 a 内の要素を選んで矢印と共に printf によって出力しています。
質問者からのお礼コメント
丁寧に教えていただき、ありがとうございます!
お礼日時:1/28 19:17