rubyは数字だけでなく,文字列も扱うことができる.文字列は(既 に出て来ているが),""や''で括られたものである.
ruby> "abc" "abc" ruby> 'abc' "abc"
""と''がどこが違うかというと""の中ではバックスラッシュ(\)を つかったいろいろな表現が使える.
ruby> "\n" "\n" ruby> '\n' "\\n" ruby> "\001" "\001" ruby> '\001' "\\001"
rubyの文字列はCの文字列よりちょっと賢い.例えば文字列の結合 は`+'でできるし,繰り返しは`*'だ.
ruby> "foo" + "bar" "foobar" ruby> "foo" * 2 "foofoo"
Cならば
char *s = malloc(strlen(s1)+strlen(s2)+1); strcpy(s, s1); strcat(s, s2);
などとするところだろう.使わなくなった文字列の領域を開放する こともrubyでは考えなくても良い.
rubyの文字列は実にたくさんの機能を持っているのだが,ここでは その一部だけを紹介しよう.
文字列の結合
ruby> word = "fo" + "o" "foo"
文字列の繰り返し
ruby> word = word * 2 "foofoo"
文字の取り出し(rubyの文字は整数)
ruby> word[0] 102 # 102は`f'のASCIIコード ruby> word[-1] 111 # 111は`o'のASCIIコード
部分文字列の取り出し
ruby> word[0,1] "f" ruby> word[-2,2] "oo" ruby> word[0..1] "fo" ruby> word[-2..-1] "oo"
一致判定
ruby> "foo" == "foo" TRUE ruby> "foo" == "bar" FALSE
では,これらの機能を使ってパズルを作ってみよう.パズルとはい えないくらいお粗末だが….
words = ['foobar', 'baz', 'quux'] srand() word = words[rand(3)]
print "guess? " while guess = STDIN.gets.chop! if word == guess print "you win\n" else print "you lose.\n" end end print "the word is ", word, ".\n"
これを実行すると以下のようになる(guess? のうしろがユーザの入 力だ)
guess? foobar you lose. guess? quux you lose. guess? ^D the word is baz.
1/3の確率のくせになかなか当たらない.おまけにつまらない.こ れは悪い例題だな.