サイタパソコン教室・IT資格情報処理技術者試験対策講座基本情報技術者試験 神奈川 基本情報技術者試験対策セミナー レッスンノート 文字列中のキーワード探索

文字列中のキーワード探索

基本情報技術者試験対策講座のレッスンノート

レッスンノートって?レッスンノートって?

3/18のレッスン内容は、以下の通りです。

 ・ ソースコードの読解練習
  - 文字列中のキーワード探索

□ ソースコードの読解練習

○ 文字列中のキーワード探索

引き続き、文字列中のキーワード探索プログラムの作成がテーマです。

今回は、生徒さんが作成途中のソースコードの確認&残りの処理の実装をしました。

まず、以下の仕様を持つ関数の枠組みがレッスン前の段階で作成できている状態です。

 ・ 引数:
   2つの文字列s、cを引数として受け取る
 ・ 戻り値:
   キーワードが見つかった場合はその先頭文字の添字、見つからなかった場合はそのことを示す数値を返す

そして、チェック処理の構造は以下のような二重ループになっていました(ここではループカウンタをi、jとします)

 int i=0;
 int j=0;
 int soeji=-1;

 for(i=0;c[i]!='\0';i++){
  for(;s[j]!='\0';j++) {
   if(c[i] == s[j]) {
    /* ここに書くべき処理が決まらない */
    j++;
    break;
   }
   else {
    /* ここの処理も決まらない */
   }
  }
 }

ここで、前回触れた「文字が連続して一致するかどうか」の観点を取り込みます。

まずは、この関数に以下の情報を追加で渡します。

 ・ キーワードの文字数(呼び出し元で取得済。key_lengthという名前で説明)

次に、この関数のローカル変数として以下を追加します。

 ・ match_num: 何文字連続で一致したか

そのもとで、上記のループの処理を以下のようにします。

 int i=0;
 int j=0;
 int soeji=-1;
 int match_num=0;

 for(i=0;c[i]!='\0';i++){
  for(;s[j]!='\0';j++) {
   if(c[i] == s[j]) {
    soeji=j;
    match_num++;
    j++;
    break;
   }
   else {
    i=0;
    soeji=0;
    match_num=0;
    j++;
   }
  }
 }

 /* match_numがkey_lengthと一致した場合だけ、設定されたsoejiを返す */

これをもとに、実装の続けてみてください。


このやり方で上手く動くようになったら、効率のよい手法を紹介します。

目的・種類別に基本情報技術者試験対策・合格講座を探す

新着レッスンノート

8/10のレッスン内容は、以下の通りです。  ・ C言語における乱数の取り扱い   - 指定範囲の乱数を求める計算式 詳細は、紙でお渡ししたノートも参照してください。 □ C言語における乱数の取り扱い プログラミングでは、厳密な乱数ではなく「擬似乱数列」と呼ばれる配列...

7/30 のレッスン内容は、以下の通りです。  ・ 再帰呼び出しのおさらい  ・ バイナリファイルの読み書き 詳細は、レッスン時にお渡ししたノートを参照してください。 □ 再帰呼び出しのおさらい 前々回までのテーマだった「最短経路の距離を求めるプログラム」について、以...

7/22 のレッスン内容は、以下の通りです。  ・ 時刻関連の処理   - 時刻関連の型   - 時刻関連の標準関数 詳細は、レッスン時にお渡ししたノートを参照してください。 □ 時刻関連の処理 今回のテーマは、時刻関連の処理です。 時刻関連の処理を実装する場...

7/12 のレッスン内容は、以下の通りです。  ・ 最短経路計算プログラムの動作説明 今回の詳細は、レッスン時にお渡ししたノートを参照してください。 □ 最短経路計算プログラムの動作説明 今回は、ソースコードを題材として最短経路計算プログラムの動き方について説明しました...

6/24のレッスン内容は、以下の通りです。  ・ 構造体型宣言の補足  ・ bool型 詳細は、レッスン時にお渡ししたノートも参照してください。 今回は、最短経路を求めるプログラムを題材としました。 □ 構造体型宣言の補足 構造体型宣言について質問があったので、...

レッスンノート ページ先頭へ

基本情報技術者試験情報

サイタの基本情報技術者試験講師がブログを通して、基本情報技術者試験情報を発信。更新情報のチェックはこちらから!