【问题标题】:Read from array1 write from array2从array1读取从array2写入
【发布时间】:2017-02-10 15:19:05
【问题描述】:

只是作为初学者学习一些基本的 Ruby 概念。并不是真的在寻找这样的代码,而是在以下问题背后的一些基本原则(如果你需要的话,显然可以随意用代码表达自己:0)

在一个简单的编辑文本练习中,用户输入一些文本,然后输入要编辑的单词,我对此很好,可以通过多种方式使其工作。 不过……

为了处理用户可以为文本或编辑的单词输入大写和/或小写字母的可能性,我需要再次创建变量.downcase!,这没有问题。但是如果程序运行后,您想将单词恢复到原始状态怎么办?

我认为您可能需要为原始文本创建一个数组,其中每个单词在数组中都有一个索引,创建一个带有小写字母的相应数组,如果一个单词没有被编辑,那么您将比较索引从小写数组中写入原始数组中的相应索引...这听起来正确还是我想多了,有没有更简单的方法?

感谢您的帮助

puts " What is your message"
text1 = gets.chomp
text2 = text1.downcase
puts "What is your secret word"
redact = gets.chomp.downcase!
words = text2.split (" ")
words.each do |x|
  if 
   x == redact
   print "REDACTED" + " "
 else
   print x + " "
   end
end

我已经添加了我的工作代码,你可以看到我已经将 text1 与 text2 分开了,这并不是绝对必要的,而是为了保持原始格式

【问题讨论】:

    标签: arrays ruby variables


    【解决方案1】:

    您的解决方案听起来可行,作为初学者,编写这样的完整解决方案可能会很有用。但不要忘记 ruby​​ 可以为您做很多有趣的事情。

    假设我们将输入输入到sentence,而要编辑的字符串存储在redact

    我们可以做这样简单的事情:

    sentence.gsub(/#{redact}/i, "*" * redact.length)
    

    gsub 查找第一个参数的所有匹配项并将其替换为第二个参数,并返回一个新字符串。 首先请注意,我们将编辑后的字符串用作第一个 arg 的 regular expressioni 表示它应该匹配不区分大小写,如您所愿。 现在第二个 arg 只是一个与编辑字符串等长的星号字符串。

    例如,如果我们有以下内容:

    sentence = 'this is My Sentence'
    redact = 'my'
    puts sentence.gsub(/#{redact}/i, "*" * redact.length)
    

    上述方法将打印this is ** Sentence

    还有一点需要注意:这个正则表达式将匹配所有出现的字符串。例如,如果redact = 'is',则生成的句子将是th** ** My Sentence。如果这不是预期的用例,您可以重新编写正则表达式来避免这种情况。

    【讨论】:

    • 非常感谢贾斯汀,这正是我所需要的,我不会假装我完全理解这一切,但至少我现在有了下一个主题的名称“.gsub”再次感谢
    • 很高兴听到!是的,在那一行代码中发生了一些事情,尝试将其分解为简单的案例并进行测试。另请注意, gsub 可以直接替换字符串(没有正则表达式,但那时您将开始遇到区分大小写的问题)。如果您想了解更多信息,这个site 非常适合玩正则表达式。
    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多