gpt4 book ai didi

ruby - 使用 Ruby bang 方法时匹配英文单词算法停止工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:58:53 25 4
gpt4 key购买 nike

我正在编写一个匹配算法,用于将用户输入的单词与大量英语单词进行比较,以查看可以找到多少匹配项。一切正常,除了我有两行代码,它们本质上是为了不两次选择相同的字母,它们使整个过程只返回一个字母。这是我所做的:

word_array = []

File.open("wordsEn.txt").each do |line|
word_array << line.chomp
end

puts "Please enter a string of characters with no spaces:"
user_string = gets.chomp.downcase

user_string_array = user_string.split("")

matching_words = []

word_array.each do |word|
one_array = word.split("")

tmp_user_string_array = user_string_array

letter_counter = 0

for i in 0...word.length
if tmp_user_string_array.include? one_array[i]
letter_counter += 1

string_index = tmp_user_string_array.index(one_array[i])
tmp_user_string_array.slice!(string_index)
end
end

if letter_counter == word.length
matching_words << word
end
end

puts matching_words

这部分是打破它的地方:

string_index = tmp_user_string_array.index(one_array[i])
tmp_user_string_array.slice!(string_index)

任何人都可以在这里看到问题吗?这一切对我来说都很有意义。

最佳答案

我明白发生了什么。您正在消除不匹配单词的字母,这会阻止找到匹配单词。

例如,拿这个单词列表:

ant
bear
cat
dog
emu

这个输入到你的程序:

catdog

您要查找的第一个词是 ant ,这会导致 atcatdog 中切出, 离开 cdog .现字cat找不到了。

解决方法是确保您的 tmp_user_string_array真的是一个临时数组。目前它是对原始 user_string_array 的引用,这意味着您正在破坏性地修改用户输入。在开始切片和切 block 之前,您应该复制一份。

一旦你开始工作,你可能想考虑不需要复制和切片数组的更有效的方法。考虑一下:如果您要在开始寻找匹配项之前对词典中的每个单词以及输入字符串进行排序会怎样?这会变成 cat 这个词进入act和输入 acatdog进入aacdgot .您知道如何遍历排序后的单词和排序后的输入来搜索匹配项而无需进行任何切片吗?

关于ruby - 使用 Ruby bang 方法时匹配英文单词算法停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27205313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com