【问题标题】:Comparing individual words in arrays [closed]比较数组中的单个单词[关闭]
【发布时间】:2014-03-28 04:57:57
【问题描述】:

我正在寻找一种方法来获取用户输入的两个句子,然后让用户选择一个数字,让程序检查与该数字对应的单词在两个句子中是否相同。

因此,如果每个句子中有 8 个单词并且他们选择了数字 4,程序将比较两个句子中的第四个单词,然后告诉用户两个“字符串”匹配。

使用数组还是只使用字符串更好?

我会在这种情况下使用 split 吗?

【问题讨论】:

  • 这太复杂了,无法在一小段代码中完成。您需要自然语言处理和人工智能来检测单词边界。如果用户输入一个字符串"New York city",应该是一个字,还是两个字New Yorkcity,还是三个?除非你能检测到单词边界,否则你无法计算单词。

标签: ruby arrays string split


【解决方案1】:

最好使用数组,因为它们更容易处理。它更多的是个人喜好。 我会做这样的事情

 sentence_1 = "The brown fox jumped over the white fence" || (User Input)
 sentence_2 = "The White fox ran over the white rails" || (User Input)

 array_1 = sentence_1.split(" ")
 array_2 = sentence_2.split(" ")

 number = gets.to_i

  # This is assuming user enters numbers starting from 1 and not 0

 number = number - 1  #index

 word_1 = array_1[number] rescue ''
 word_2 = array_2[number] rescue ''

 unless word_1 == '' || word_2 == ''
     word_1 == word_2 ? (puts "Match: #{word_1} = #{word_2}") : (puts "MisMatch :#{word_1} Not equal #{word_2}")
 else
     puts "The sentence is not that long"
 end

【讨论】:

  • 啊,感谢堆积一生,你的也是一个很好的答案。这里可以有两个勾选的答案吗?
  • 您可以为每个有用的答案投票,但您只能选择一个答案接受。
  • rescue 什么都不做;如果数字太大,您不会收到错误,您会得到nil
  • 是的,可以在此处添加自定义救援。这只是一个原型
【解决方案2】:

是的,我认为拆分是一个不错的选择。

假设单词边界是空格,你可以这样做:

string1 = "my name is Jerry"
string2 = "his name was Pete"

number = 2
string1.split(/\s/)[number - 1] == string2.split(/\s/)[number - 1]
#=> true

number = 3
string1.split(/\s/)[number - 1] == string2.split(/\s/)[number - 1]
#=> false

【讨论】:

  • 我知道数组从 0,1,2,... 开始计数,但是字符串是否以 1 开头?
  • @user3295198 String#split 也会产生一个数组。重点是他想比较第 2 个和第 3 个单词,所以分别使用索引 1 和 2。
  • 感谢 Levi,在添加我的用户输入代码并执行 if then else 语句后,它看起来可以工作了。
猜你喜欢
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多