アルゴリズムとプログラミング

基本情報技術者試験文字列処理」の問題

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:normal
文字型の配列 s から、開始位置 from から長さ len 個の文字を取り出して新しい配列 r を作る次の手続に、s = {'p','r','o','g','r','a','m'}(要素数 7、添字は 1 から), from = 4, len = 3 を与えて実行したとき、戻り値 r の内容はどれか。
○文字型の配列: substr(文字型の配列: s, 整数型: from, 整数型: len)
  文字型の配列: r ← 要素数len
  整数型: k
  for (k を 1 から len まで 1 ずつ増やす)
    r[k] ← s[from + k - 1]
  endfor
  return r
{'o','g','r'}
{'r','a','m'}
{'g','r','a'}(正答)
{'g','r','a','m'}(長さ誤り)
正解
{'g','r','a'}(正答)

r[k]=s[from+k-1] により k=1,2,3 でそれぞれ s[4]='g', s[5]='r', s[6]='a' を取り出す。よって r={'g','r','a'} となり ウが正しい。

?選択肢ごとの解説

ア ×開始位置を 1 つ手前の s[3]='o' から取り 'o','g','r' とした off-by-one の誤りである。
イ ×末尾 3 文字 s[5..7]='r','a','m' を取り出した、from の指定を末尾起点と誤認した誤りである。
ウ ○r[k]=s[from+k-1] により k=1,2,3 でそれぞれ s[4]='g', s[5]='r', s[6]='a' を取り出す。よって r={'g','r','a'} となり ウが正しい。
エ ×長さ len=3 を 4 と取り違え 1 文字多く 'g','r','a','m' を取り出した、抽出長の誤りである。

くわしく

部分文字列抽出は from+k-1 という添字式で元配列の位置を計算する。出力側 k は 1 から、入力側は from を基点にずれる対応関係が核心である。

本番での押さえどころ

試験のコツ

k=1 のとき入力添字が from になることを確認してから走査する。

覚え方

『出力 k 番目=入力 from から数えて k 番目』と対応づけて覚える。

よくある誤り

from+k-1 の -1 を落として開始位置が 1 つずれたり、len と終了位置を混同するミスが多い。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0094

【基本情報技術者試験】文字列処理の問題 — 解答・解説|ukamiru 過去問