サイタパソコン教室・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を返す */

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


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

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

新着レッスンノート

12/11 のレッスン内容は、以下の通りです。  ・ C言語文法   - 条件演算   - (*a)++; の動き方   - a = b = c; の動き方 詳細は、紙でお渡ししたノートも参照してください。 □ C言語文法 引き続き、ソースコードの読解問題を題材に...

12/5の体験レッスンの内容は、以下の通りです。  ・ ガイダンス  ・ 基本情報技術者試験の概要   - 出題形式   - 出題の種類 詳細は、別途お渡ししたノートも参照してください。 □ ガイダンス 冒頭で、現状の確認を兼ねてガイダンスを実施しました。 ...

11/27 のレッスン内容は、以下の通りです。  ・ マルチバイト文字   - ワイド文字   - 定数表現のプレフィックス・サフィックス 詳細は、紙でお渡ししたノートも参照してください。 □ マルチバイト文字 今回のテーマは、マルチバイト文字です。 マルチバ...

11/6 のレッスン内容は、以下の通りです。  ・ 文字列の配列   - 2次元配列を使う場合   - ポインタの配列を使う場合 詳細は、紙でお渡ししたノートも参照してください。 □ 文字列の配列 今回も、C言語プログラミングの中級編の問題を題材にレッスンを進めまし...

10/28 のレッスン内容は、以下の通りです。  ・ C言語の読解練習   - strdump()の役割   - 数値の2進数表示処理 詳細は、紙でお渡ししたノートも参照してください。 □ C言語の読解練習 今回も、C言語プログラミングの中級編の問題を題材にレッスン...

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

基本情報技術者試験情報

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