我有一个包含字符串的数组。我需要检查字符串是否包含字母“s”。如果是,我必须用“th”替换它。
基本上,就是这样。
n = gets.to_i
word = ""
words = Array.new(n)
for i in 1..n
word = gets
words.push(word)
end
for w in 1..words.size
for i in 0..word.length
if w[i] == "s"
w[i] = "th"
end
end
end
puts words
它不会替换任何东西(只返回输入),我不知道为什么。
答案 0 :(得分:2)
看起来你刚刚开始使用Ruby,所以这里有一些提示。这里最明显的一点就是使用for
,这听起来很奇怪,几乎从未在Ruby中使用过。 each
枚举器和朋友几乎专门用于迭代事物,它们更好,因为它们不仅仅是简单地迭代。 <{1}}和each_with_index
是必不可少的。
你也使用了许多实际上并没有提供任何功能的中间变量,代码将整齐地折叠起来。
例如,要从标准输入中获取单词列表:
each_with_object
它接受所有输入行并在每个行上运行words = $stdin.readlines.map(&:chomp)
,删除任何换行符。
如果您想重新编写此列表以将chomp
替换为s
,请执行以下操作:
th
words.map! do |word|
word.gsub(/s/, 'th')
end
方法通常会将正则表达式匹配替换为字符串。在这种情况下,它与字母gsub
匹配。这些可能会变得更加复杂,我强烈建议您查看它们,至少可以了解它们可以做什么。这是一个棘手而又微妙的强大工具,它将一直派上用场。
记住Ruby有非常具体的文档。如果你有一个String类型的对象,String所能做的所有方法都在API documentation中拼写出来。不要害怕检查,那里有很多非常有用的工具。