Ruby Users' Guide - 文字列

前 - コピー - 次 - 目次

### 文字列

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

前 - コピー - 次 - 目次