Ruby文字列処理

2654 ワード

Rubyは文字列を数字のように処理します。単引用符('…')または二重引用符(「...」)でそれらをまとめます。
ルビー> "abc"
   "abc"
ルビー> 'abc
   "abc"
シングルクォーテーションマークとダブルクォーテーションマークは、場合によっては違っています。ダブルクォーテーションマークによって囲まれた文字列は、前列のバックボーンから出てきます。
引用符で囲まれた文字列は文字列に対して何の説明もしません。何を見ていますか?いくつかの例:
ルビー> print "abc","
a.
c
   nil
ルビー> print 'ab'、''
abc
   nil
ルビー> ""
   ""
ルビー> ''
   "\"
ルビー> "\001"
   "\001"
ルビー> '\001
   "\\001"
ルビー> "abcd #{5*3} efg"
   "abcd 15 efg"
ルビー> var = " abc "
   " abc "
ルビー> "123412345;{var}5678″
   "1234 abc 5678"
Rubyの文字列の操作はCよりもっと器用で、より直感的です。たとえば、いくつかの文字列を+でつないで、*で一つの文字列を何回も繰り返してもいいです。
ルビー> "foo" + "bar"
   "フォロワー
ルビー> "foo" * 2
   "フォロワー
対照的に、Cでは、正確なメモリ管理が必要なので、直列文字列は不器用です。
char *s = mallo(streen(s 1)+streen(s 2)+1)
strcpy(s) s 1)
stracat(s s 2)
/* ... */
free(s)
しかし、Rubyについては、文字列の空間占有問題を考慮する必要はなく、煩雑なメモリ管理から解放されます。
以下は文字列の処理です。
直列:
ルビー> ワード = "fo「fo」 + "o"
   "foo"
繰り返し:
ルビー> ワード = ワード * 2
   "フォロワー 
文字抽出(注意:Rubyでは、文字は整数とみなされます):
ルビー> ワード[0]
   102            # 102 is ASCII コード 保存先 `f。 
ルビー> ワード[-1]
   111            # 111 is ASCII コード 保存先 `o。 
(負のインデックスとは、文字列の最後からカウントされるオフセットの量で、シリアルヘッダではありません。)
サブストリップを抽出:
ルビー> here = "パーレー
   "パーレー
ルビー> herb[0,1]
   "p"
ルビー> herb[-2,2]
   "ey「
ルビー> herb[0..3]
   "パース
ルビー> herb[-5.2-2]
   "rsle" 
検査は等しい:
ルビー> "foo" == "foo"
   true
ルビー> "foo" == "bar"
   false 
注意:Rubyで 1.0の中で、以上の結果は大文字で現れます。
はい、これらの特性を試してみましょう。次は単語のパズルです。「パズル」という言葉は下のものに使いすぎるかもしれません。-)
同前 保存する this as gusess.rb
words = ['フォロワー、 'baz 'quux
secret = words[rand(3)]
print "guss "
while guss = STDIN.gets  
    gusess.chop  
    if guss == secret
       print "You win    
       break  
    else    
       print "ソリー、 あなた lose."  
    end  
    print "guss "
end
print "The ワード was ", secret "."
今はコードの詳細をあまり心配しないでください。次はパズルプログラムの実行中の会話です。
% ルビー gusess.rb
guss フォロワー
ソリー、 あなた lose.
guss quux
ソリー、 あなた lose.
guss ^D
The ワード was baz. 
(3分の1の成功率を考慮して、私はもっとよくやるべきだったかもしれません。)