zhe-hello

解决用户在搜索引擎乱输入,无空格或间接输入,进行分割

现在经常会有一个用户在搜索引擎中输入不加空格或者分割符的,近来写了一个小小的代码,用一个小字库,来匹配用户输入的单词或者是其他的东西,最后以空格分割输出。以下是一个简单的ruby程序。利用hash进行索引,查询速更快。               

$stack = []
$scan_str  = File.read("#{File.dirname(__FILE__)}/word.txt").scan(/(.*)\[/) 
$a = ""   #用来装不能分割单词的情况
def get_word
  puts "请输入需要搜索的内容"
  sum = 0 
  #for i in 0..100
     str = gets.chomp()
    #str = "ukcfefweiufweifhf"
    t1 = Time.new
    h = Hash.new()
    for i in 0..$scan_str.length-1
      h["#{$scan_str[i][0]}"]=1  
    end
    if h.key?str
       puts "你搜索的结果为:#{str}"
       return   
    else
       i = 0  #递归开始的位置
       j = 0  #数组下标
       k = 1  #每次开始的位置
       fun(str,i,j,k)
       if $a.length>0&&$stack.length==0    
          puts "输入的单词可能错误哦 可能的搜索为结果:#{$a}"
       end
       if $a.length==0
          puts "没有符合的"
       end
       $stack = []
       $a = ""
       t2 = Time.new
       c = t2-t1
       puts "执行代码的时间为:#{t2-t1}"
       #sum = sum + c
    end
  #end 
  #puts "总时间为:#{sum}"
  #puts "平均时间为:#{sum/100}" 
end
  
def fun(str,i,j,k)
  h = Hash.new()
  for z in 0..$scan_str.length-1
    h["#{$scan_str[z][0]}"]=1
  end 
  if str.length.eql?$stack.join("").length  #数组转string join("")
    puts "搜索的结果为:\n #{$stack.join(" ")}"   #以空格分开 输出
    return 
  end
  q = []
  while !str.length.eql?$stack.join("").length
     q[j]=str[i,k]
     #puts "j = #{j}, k = #{k}"
     #puts "fun的str:#{str}"
     #puts "fun的q:#{q}"
     #puts "第#{j}个单词:#{q[j]}"
     if h.key?q[j]
       #puts "找到单词:#{q[j]},找到啦  找到啦"   
       $stack.push(q[j])
       $stack.push("")
       #puts "匹配入栈的值:#{$stack}"
       $a = q[j]
       fun(str,$stack.join("").length,j+1,1)
       #puts "栈的值:#{$stack}"
     end 
     #puts "q[str.length-1]:#{q[str.length-1]}"
     j = j+1
     k = k+1
     if q[str.length-1]!=nil  #如果后面的单词不匹配
       if !h.key?q[str.length-1]
        $stack.pop
        $stack.pop 
        return 
       end 
     end
  end  
end
ruby代码
发表于 2018-03-20 10:18 WangHello 阅读(...) 评论(...) 编辑 收藏
 

相关文章: