Ruby文字列処理
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の成功率を考慮して、私はもっとよくやるべきだったかもしれません。)
ルビー> "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の成功率を考慮して、私はもっとよくやるべきだったかもしれません。)