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

zhe-hello 2018-03-20 原文

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

现在经常会有一个用户在搜索引擎中输入不加空格或者分割符的,近来写了一个小小的代码,用一个小字库,来匹配用户输入的单词或者是其他的东西,最后以空格分割输出。以下是一个简单的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 阅读() 评论() 编辑 收藏

 

版权声明:本文为zhe-hello原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhe-hello/p/8607649.html

解决用户在搜索引擎乱输入,无空格或间接输入,进行分割的更多相关文章

  1. 使用Jekyll + GitHub Pages免费搭建个人博客

    使用Jekyll + GitHub Pages免费搭建个人博客 使用Jekyll + GitHub Pages […]...

  2. redis系列:通过demo学习hash命令

    redis系列:通过demo学习hash命令 前言 这一篇文章将讲述Redis中的hash类型命令,同样也是通 […]...

  3. 算法与数据结构基础 – 哈希表(Hash Table)

    算法与数据结构基础 – 哈希表(Hash Table) 2019-08-05 17:50 by b […]...

  4. Python字符串分割方法总结

    Python中字符串分割的常用方法是直接调用字符串的str.split方法,但是其只能指定一种分隔符,如果想指定多个分隔符拆分字符串需要用到re.split方法(正则表达式的split方法)。 str.split 字符串的split方法...

  5. 通过 BT 种子 Hash 值从 BitComet 服务器上下载种子文件

    程序和代码下载: 最新,包含 x64 版本:http://pan.baidu.com/netdisk/sing […]...

  6. Java Hash Collision之数据生产

    Java Hash Collision之数据生产 上一篇文章一种高级的DoS攻击-Hash碰撞攻击我通过伪造H […]...

  7. 使用java实现希表的基础功能

    用java代码完成哈希表数据结构的简单实现, 以公司雇员的添加修改作为模拟实例 具体代码如下: package […]...

  8. redis requires ruby version 2.2.2的解决方案

    在执行gem install redis时 提示: gem install redis ERROR: Erro […]...

随机推荐

  1. Maven配置环境变量

    Windows: 1:新建系统M2_HOME变量,并把安装maven路径拷贝上去 ​ 2:配置path变量,并 […]...

  2. 个人微信Hook-C#Demo开发SDK

    目录 基础信息类 好友操作 群操作类 发送信息 接收信息 Demo源码 基础信息类 获取个人信息 从网络获取群 […]...

  3. 数据管理:业务数据清洗,落地实现方案

    分析业务通常都是要面对全局数据,如果出现大量的上述情况,就会导致数据在使用的时候难度非常大,随之也会带来很多问 […]...

  4. 浅谈class私有变量

    class的前世今生 在 es6 之前,虽然 JS 和 Java 同样都是 OOP (面向对象)语言,但是在 […]...

  5. js 实现论坛评论模块原理

    <body>   <table id=”tb” border= […]...

  6. 精细积分法文献恢复

    精细积分法文献恢复 Posted on 2020-06-30 11:34  hwzhou  阅读(… […]...

  7. RMI入门教程

    一、什么是RMI      Java远程方法调用,即Java RMI(Java Remote Method I […]...

  8. windows平台最简单的rtmp/hls流媒体服务器

    feature: rtmp/hls live server for windows, double click […]...

展开目录

目录导航