rubyは数字だけでなく,文字列も扱うことができる.文字列は(既 に出て来ているが),""や''で括られたものである.
ruby> "abc" "abc" ruby> 'abc' "abc"
"..."と'...'がどこが違うかというと"..."の中ではバックスラッシュ(\)を つかったいろいろな表現が使え,さらに #{}で囲んだ範囲内の式の結果が埋め込まれる.
ruby> "\n" "\n" ruby> '\n' "\\n" ruby> "\001" "\001" ruby> '\001' "\\001" ruby> "abcd #{5*3} efg" "abcd 15 efg" ruby> var = " abc " " abc " ruby> "1234#{var}5678" "1234 abc 5678"
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上の例は、ruby 1.0 の場合で、ruby 1.1 では、
true, false
というふうに小文字になる。
では,これらの機能を使ってパズルを作ってみよう.パズルとはい えないくらいお粗末だが….
words = ['foobar', 'baz', 'quux'] srand() word = words[rand(3)] print "guess? " while guess = STDIN.gets guess.chop! if word == guess print "you win\n" break else print "you lose.\n" end print "guess? " end print "the word is ", word, ".\n"
詳しいことはあとで説明するからわからないところがあっても気にしなくていい。
これを実行すると以下のようになる(guess? のうしろがユーザの入力だ)
guess? foobar you lose. guess? quux you lose. guess? ^D the word is baz.
1/3の確率のくせになかなか当たらない.おまけにつまらない. これは悪い例題だな.