[ruby-list:128] TUTOROAL - strings

From: matz@... (Yukihiro Matsumoto)
Date: 1996-02-06 06:10:32 UTC
List: ruby-list #128
チュートリアルの5回目です(だよね).今回は『文字列』.

--
* 文字列と正規表現

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[0,1]
 "f"
 ruby> word[0..1]
 "fo"

一致判定

 ruby> "foo" == "foo"
 TRUE
 ruby> "foo" == "bar"
 FALSE

では,これらの機能を使ってパズルを作ってみよう.パズルとはい
えないくらいお粗末だが….

 words = ['foobar', 'baz', 'quux']
 srand()
 word = words[rand(3)]

 print "guess? "
 guess = STDIN.gets
 if word == guess
   print "you win\n"
 else
   print "you lose. the word is ", word, ".\n"
 end

これを実行すると以下のようになる(foobarがユーザの入力だ).

 guess? foobar
 you lose. the word is baz.

なかなか当たらない.おまけにつまらない.これは悪い例題だな.

In This Thread

Prev Next