文字列処理の擬似言語

回文判定・文字カウント・連結など文字列操作の擬似言語を学びます。

科目Bで頻出の文字列操作。char配列の走査と、よく出るパターン (回文判定・置換・カウント) を擬似言語で読みこなします。

日野 こむぎ(普段) 日野 こむぎ

文字列処理って、配列と何が違うの?

藤森 さやか 先生(笑顔) 藤森 さやか 先生

基本的には文字 (char) の配列なのよ。
s[1] は s の1文字目、s の要素数 が文字列の長さ、というふうに扱うわ。

青木 澪(普段) 青木 澪

頻出パターンを見ていきましょう。
例えば回文判定、前から読んでも後ろから読んでも同じかを判定するものですね:

○ 手続: isPalindrome(文字型の配列: s)
  整数型: i, j
  i ← 1
  j ← sの要素数
  while (i < j)
    if (s[i] ≠ s[j])
      return 偽
    endif
    i ← i + 1
    j ← j - 1
  endwhile
  return 真
青木 澪(普段) 青木 澪

前 (i) と後ろ (j) から1ずつ近づけていって、すべて一致すれば回文ですね。
一致しないものが出たら即座に偽 (false) を返すパターンです。

桃井 すみれ(普段) 桃井 すみれ

次は文字カウントなのぉ?

○ 手続: countChar(文字型の配列: s, 文字型: c)
  整数型: i, count
  count ← 0
  for (i を 1 から sの要素数 まで 1 ずつ増やす)
    if (s[i] = c)
      count ← count + 1
    endif
  endfor
  return count
青木 澪(笑顔) 青木 澪

シンプルですが、forループ + if + 加算 の3点セットは文字列処理の基本パターンですね。

藤森 さやか 先生(普段) 藤森 さやか 先生

もう一つ、文字列の連結も典型ね。
新しい配列に1文字ずつコピーしていくのよ:

○ 手続: concat(文字型の配列: a, 文字型の配列: b)
  文字型の配列: result
  整数型: i
  for (i を 1 から aの要素数 まで 1 ずつ増やす)
    result[i] ← a[i]
  endfor
  for (i を 1 から bの要素数 まで 1 ずつ増やす)
    result[aの要素数 + i] ← b[i]
  endfor
  return result
日野 こむぎ(笑い) 日野 こむぎ

添字の計算が肝じゃん!
あたしは、aの要素数 + i で b を後ろにくっつけるって覚えたよ!

確認クイズ

上記 isPalindrome 手続に文字列 "LEVEL" (要素 L,E,V,E,L) を渡したときの戻り値は何か。

  1. 真 (true)
  2. 偽 (false)
  3. L
  4. 5
こたえを見る

正解: 1. 真 (true)

L=L, E=E (i=1とj=5、i=2とj=4を比較)、最後 i=3 なので while ループを抜け、すべて一致したため 真 (true) を返します。LEVELは回文なので正解は真。

🔖 この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。