基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成20年 春期 基本情報技術者 午後 問02
問02   部分文字列の出現回数を数える

 次のプログラムの説明及びプログラムを読んで,設問1,2に答えよ。

〔プログラムの説明〕

 長さが Textlen の文字列 SourceText の中で,長さが Patlen の文字列 Pattern と一致する部分の文字列(以下,部分文字列という)の出現回数を数える 関数 MatchCounter である。ここで, 0 < Patlen ≦ Textlen である。

(1) MatchCounter の処理手順は,次のとおりである。

 @ 一致する部分文字列の出現回数を数える変数 Counter の値を0に初期化する。

 A SourceText の比較開始位置を先頭から順に1文字ずつ後ろにずらしながら, その比較開始位置から始まる長さ Patlen の文字列と Pattern が一致するかどうかを調べ, 一致したら出現回数 Counter の値に1を加算する。

 B Counter の値を返す。

(2) MatchCounter の引数と返却値の仕様を表に示す。文字列は文字型配列の各要素に 1文字ずつ格納されている。また,各配列の添字は0から始まる。

   表 MatchCounter の引数と返却値の仕様

 引数/返却値 データ型  入力/出力 意味
 SourceText[ ] 文字型 入力  検索される文字列が格納されている1次元配列
 Textlen 整数型 入力  検索される文字列の長さ
 Pattern[ ] 文字型 入力  検索する文字列が格納されている1次元配列
 Patlen 整数型 入力  検索する文字列の長さ
 返却値 整数型 出力  SourceText の中で Pattern と一致した部分
 文字列の出現回数

〔プログラム〕

設問1 プログラム中の と入れる正しい答えを, 解答群の中から選べ。

a に関する解答群

ア i + Patlen ≦ Textlen      イ i + Patlen < Textlen

ウ i + Textlen ≦ Patlen      エ i + Textlen < Patlen

b に関する解答群 ア SourceText[i] = Pattern[k]

イ SourceText[j] = Pattern[k]

ウ SourceText[k] = Pattern[i]

エ SotrceText[k] = Pattern[j]

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

基本情報技術者試験


設問2 Pattern と一致した部分文字列は以降の検索対象から外すように, このプログラムを変更する。

 例えば, SourceText とPattern が図に示す文字列であるとき,プログラムでは, 比較開始位置を@,A,B,…と移動して,一致する部分文字列の出現回数を求めるので, 下線の部分文字列と二重下線の部分文字列がともに数えられる。 これに対して,一致した部分文字列を検索対象から外す場合は,比較開始位 置を@,A,D,…と移動するので,二重下線の部分文字列は数えられない。

  図 比較開始位置を変更する場合の例

 このとき,プログラム中のα部分の変更内容として正しい答えを,解答群の中から選べ。

解答群

解答 ←クリックすると正解が表示されます

[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]