我用一个简单的程序来替换(())中的文本和用户输入: 如果我有这样的文本:
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
但不知何故,ruby不会验证用户输入,而是我得到:
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
答案 0 :(得分: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