基本情報技術者試験「文字列処理」の問題
文字型の配列 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 と終了位置を混同するミスが多い。
アルゴリズムとプログラミングの他の問題
次の擬似言語で表される手続 sumOdd を、引数として要素数 5 の整数型の配列 {12, 125, 1008,…次の擬似言語は、整数型の配列 arr に対して隣接交換を行う手続の一部であり、外側ループの 1 回目(1…次の擬似言語は昇順に整列された配列 arr に対する二分探索の手続である。arr = {2, 4, 6, 8, 10,…次の擬似言語で表される再帰手続 f を、引数 n = 20 で呼び出したとき、戻り値として返される値はどれか。
```…単方向連結リストの各ノードはメンバ val(整数)と next(次ノードへの参照。なければ NULL)をもつ。先頭ノード…スタックに対する push(積む)と…
この問題を、AIの8-ways解説つきで。
無料ではじめる →基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。
ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0094