次へ: 4.4 ユーザ定義関数化 上へ: 4 課題文の作成 前へ: 4.2 ランダムな整数列 (PDF ファイル: awk2.pdf)


4.3 文字列値配列の生成

文字に番号をつけるには、配列を利用すればいいでしょう。 簡単に言えば、
a[1]="a", a[2]="b", a[3]="c",..., a[26]="z", a[27]=" "
( はスペースを意味します)
のようにするわけですが、これを 27 個も書くのは面倒なので、 ここでは split() を利用する方法を紹介します。
split(s, h, r): 文字列 $s$ を、正規表現 $r$ を区切りとして区切って 配列 $h$ に保存し、その個数を返す
正規表現 $r$ を省略すると、split() はスペース、タブ区切りとなります。 例えば、
x=split("A 23 c",h)
の結果は、
$x=3$, h[1]="A", h[2]="23", h[3]="c"
となります。一方、$r$ として "" (空文字列) を指定すると 文字列を 1 文字ずつ切り離してくれますので、
x=split("A 23 c",h,"")
の結果は、
$x=7$, h[1]="A", h[2]=" ", h[3]="2", h[4]="3", h[5]=" ", h[6]=" ", h[7]="c"
となります。よって、a$\sim$z の配列は、
split("abcdefghijklmnopqrstuvwxyz",a,"")
で作れることになります。

しかし、スペースも入れて、しかもスペースが適当に出るようにしたいので、 5 回に 1 回くらいスペースが出るようにスペースを 6 個追加して (6/(26+6)=6/32$\approx$1/5)、

N=split("abcdefghijklmnopqrstuvwxyz ",a,"")
とします。

あとは、$1\sim N$ までの乱数を

x=int(rand()*N)+1
と作って、これを 40 回やればランダムな 40 字の文字列が作れることになります。


次へ: 4.4 ユーザ定義関数化 上へ: 4 課題文の作成 前へ: 4.2 ランダムな整数列
竹野茂治@新潟工科大学
2006年4月27日