- コピー - - 目次

文字列


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の確率のくせになかなか当たらない.おまけにつまらない. これは悪い例題だな.


- コピー - - 目次