課題1: レポート課題1-2

以下の課題問題を解き、レポートとして提出せよ。

  1. 与えられた文字列中に、別の文字列が含まれているかどうかを検査する プログラムを作成せよ。 その際、大文字小文字を区別せずに検索すること。 また、一致個所が複数ある場合は全て表示すること。

    ヒント:大文字と小文字の区別をしない比較を行なうには検査する文字を 大文字か小文字に変換してから比較を行なえばよい。

    例えば、以下のような"You should backup your data files." という文字列と検索文字列として"you"が与えられたときに、 前者に後者が含まれているかどうかを検査する。
    この場合、先頭の "You"と途中の"you"の2個所が一致するので両方を表示する。

    string="You should backup your data files."
    pattern="you"
    found at 0
    found at 18
    
    (含まれる場合は、その場所(先頭を0として何文字目か)を表示する)
    
    string="You should backup your data files."
    pattern="my"
    
    (含まれない場合は、何も表示しない)
    

    プログラムの雛型をここに置いておくので、 このプログラムをベースにして必要なコードを追加すること。
    関数 search_string()の中身を作ればよい。
    (main関数の中身は気にしなくてよい)

      注意:本課題プログラムについて、str で始まる名前を持つ文字列データ 操作ライブラリ関数(strcmp() など)を使わないこと。 toupper()tolower() などの文字型データ操作ライブラリ関数は使用してよい。

    文字列検索のアルゴリズムは何を使ってもよい。
    ここに説明している通りの簡単な方法でもよい。 ただし、この方法は無駄な比較が多く効率が悪い。
    文字列探索の効率的なアルゴリズムとしては KMP (Knuth-Morris-Pratt)法BM (Boyer-Moore)法が有名である。 (ただし、処理内容は複雑である)

    オプション課題

    上記プログラムを機能拡張する。