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

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


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

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

新着レッスンノート

6/10のレッスン内容は、以下の通りです。  ・ 基本情報技術者試験 午前免除試験の要綱  ・ 数値表現   - 10進数と2進数   - 基数変換   - 8進数と16進数   - ビットの意味 詳細は、レッスン中に紙でお渡ししたノートも併せて参照してください。 ...

6/3のレッスン内容は、以下の通りです。  ・ ポインタのおさらい  ・ 構造体を指すポインタ 詳細は、紙でお渡ししたノートも参照してください。 □ ポインタのおさらい まずは、ポインタについておさらいしました。 この内容は、2016/11/30 に実施していま...

5/26のレッスン内容は、以下の通りです。  ・ 整数型同士の型変換ルール  ・ 自作strcmp()の実装チェック 詳細は、紙でお渡ししたノートも参照してください。 □ 整数型同士の型変換ルール 整数型同士の型変換(符号なしから符号付き、大きいサイズから小さいサイズ...

5/18のレッスン内容は、以下の通りです。  ・ 複数の条件を同時にチェックする方法 詳細は、紙でお渡ししたノートも参照してください。 □ 複数の条件を同時にチェックする方法 例えば、変数x に対して以下のような条件チェックをする場合があります。  ・ 変数x の...

5/11のレッスン内容は、以下の通りです。  ・ ソースコードの読解練習   - 文字列 -> 整数値の変換関数の自作  ・ C言語文法   - 複合代入 詳細は、紙でお渡ししたノートも参照してください。 □ ソースコードの読解練習 ○ 文字列 -> 整数値の...

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

基本情報技術者試験情報

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