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 回答