以下の課題問題を解き、レポートとして提出せよ。
ヒント:大文字と小文字の区別をしない比較を行なうには検査する文字を
大文字か小文字に変換してから比較を行なえばよい。
例えば、以下のような"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)法が有名である。
(ただし、処理内容は複雑である)
オプション課題
上記プログラムを機能拡張する。
string="You should backup your data files." pattern="you" found at 0 found at 18 total 2 time(s)
string="You should backup your data files." pattern="you" found at 0 found at 18 You should backup your data files. ^^^ ^^^
string="You should turn on your computer." pattern="on" replace="off" You should turn off your computer.