Ruby返回匹配字符大小

Ruby返回匹配字符大小,ruby,string,Ruby,String,我正在尝试制作一个游戏,其中包括返回你猜到的、位于随机生成单词正确位置的角色数量(例如,单词是“board”,你输入“boat”,你会得到2/5,你输入“board”,你会得到5/5) 它适用于单词长度以下的任何猜测。如果单词是“bye”,我输入“byk”,它将返回3/3,但如果我输入“by”,它将返回2/3。只是想看看我是否做错了什么。发生这种情况是因为File.readlines和get都没有从返回的字符串中修剪尾随的换行符 irb(main):001:0> File.read("wo

我正在尝试制作一个游戏,其中包括返回你猜到的、位于随机生成单词正确位置的角色数量(例如,单词是“board”,你输入“boat”,你会得到2/5,你输入“board”,你会得到5/5)


它适用于单词长度以下的任何猜测。如果单词是“bye”,我输入“byk”,它将返回3/3,但如果我输入“by”,它将返回2/3。只是想看看我是否做错了什么。

发生这种情况是因为
File.readlines
get
都没有从返回的字符串中修剪尾随的换行符

irb(main):001:0> File.read("wordslist.txt")
=> "hello\nbye\n"
irb(main):002:0> File.readlines("wordslist.txt")
=> ["hello\n", "bye\n"]
irb(main):003:0> gets
bye
=> "bye\n"
当您的字典包含“bye\n”并键入“byk\n”时,实际上有3个匹配项,“b”、“y”和“\n”。但是,如果输入“by\n”,则换行符不匹配。只有当输入字符串的长度相同时,换行符才会匹配,并且返回的值将比预期值多1

要解决此问题,可以在比较字符之前对两个字符串调用
.chomp
,以删除尾随空格:

word = File.readlines("wordslist.txt").sample.chomp;
guess = gets.chomp
same = guess.each_char.zip(word.each_char).select{ |g,w| g == w }.size

提示:您可以使用
.count
而不是
。选择

same = guess.each_char.zip(word.each_char).count{ |g,w| g == w }
一个人可以使用三个点(
(0…word.size)
),但我总是使用两个点。当
i>=string.size
时,调用
string[i]#=>nil

same = guess.each_char.zip(word.each_char).count{ |g,w| g == w }
def number_same_position(guess, word)
  (0..word.size-1).count { |i| guess[i] == word[i] }
end

number_same_position("boat", "board")   #=> 3
number_same_position("bait", "board")   #=> 1
number_same_position("sulk", "board")   #=> 0
number_same_position("boater", "board") #=> 3
number_same_position("", "board")       #=> 0