使用Ruby中的循环修改字符串

时间:2016-10-15 05:47:08

标签: ruby

我有一个包含字符串的数组。我需要检查字符串是否包含字母“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

它不会替换任何东西(只返回输入),我不知道为什么。

1 个答案:

答案 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中拼写出来。不要害怕检查,那里有很多非常有用的工具。