0

(( )) 内のテキストをユーザー入力に置き換える簡単なプログラムを作成しました。たとえば、このテキストがある場合:

i hab an terrible ((userinput1)) last ((userinput2)) in a horrible ((userinput3))

最初に (( を #{ および )) を } に置き換えようとしました

str1 = gets.chomp
str2 = str1.clone

a = 0

begin
s = str2.index('((', a)
str2[s..s+1] = '#{'
a = a + s + 1
end until str2.length < a

b = 0

begin
s = str2.index('))', b)
str2[s..s+1] = '}' 
b = b + s + 1
end until str2.length < b

userinput1 = gets.chomp
userinput2 = gets.chomp
userinput3 = gets.chomp

puts str2

しかし、どういうわけか、ルビーはユーザー入力を検証しません。代わりに、次のようになります:

i hab an terrible #{userinput1} last #{userinput2} in a horrible #{userinput}

問題は、私のコードで私が書いたことだと思います:

str2[s..s+1] = '#{' 

それ以外の

str2[s..s+1] = "#{"

残りのコードはすべて、} で閉じられるまでオブジェクトであるためです。それで、なにかお手伝いできますか ?私の問題を理解していただけましたか?

str1 = gets.chomp

word = str1.scan(/\(\(\w+\)\)/)

word.each do |word|
str1.gsub(word, "what the fuck")
end

puts str1
4

1 に答える 1

0

よい試み。しかし、もっと簡単な方法があります。はるかに簡単です:)基本的に、ユーザー入力を収集するだけです。文字列部分を置き換える方法はすでにあります。

userinput1 = gets.chomp
userinput2 = gets.chomp
userinput3 = gets.chomp

template = "i had a terrible ((userinput1)) last ((userinput2)) in a horrible ((userinput3)"

result = template.gsub('((userinput1))', userinput1).
                  gsub('((userinput2))', userinput2).
                  gsub('((userinput3))', userinput3)
              #    ^^ replacing happens here    
puts result
于 2013-07-24T10:30:21.593 に答える