user-0 提问: C++的模糊查询

回复:
user: user-1
content: 引用 12 楼 whoho 的回复:[quote=引用 8 楼 zhi_ai_yaya 的回复:] [quote=引用 4 楼 taodm 的回复:] 楼主，听说过马尔科夫链么？ 没听说过的，就随便糊弄一下就行啦。 之前就看过一个微软亚洲研究院的研究院使用马尔科夫建立一个行为学习模型，用于搜索引擎的广告支付收益最大化的计算。  对于lz的新需求，有种用牛刀杀鸡，大炮轰蚊子的感觉  [/quote]   马尔可夫链（译名有多个，别纠正我了），也不必太认为是大炮啦，用于字符串的基本算法实现是很简单的 有C++的教科书就是用这个作例子  当然你要做更复杂的应用或者理论分析，那是另外一个层面，说高大上才不为过[/quote] 额，这些专业词汇的中文译名肯定是稍有差别的，但是我们都明白是指同一样事物呀，这并不影响沟通。呵呵

user: user-2
content: 引用 1 楼 lovesmiles 的回复:数据库的sql语句就有模糊查找的关键词 like  select *from table where name like ‘%哈%’ and like ‘%理%’ and like‘%工%’  如果你要用c++。直接用string操作即可，分别查找哈，理，工三个字。如果这三个字都存在，即找到。+1

user: user-3
content: SQLserver中不是有模糊查询的语句么？

user: user-4
content: “模糊查询”是个很模糊的概念 实现上能天差地别 比较容易实现的方法，楼上好像都说了，特别是3楼lovesmiles兄的答复

user: user-4
content: 引用 8 楼 zhi_ai_yaya 的回复:[quote=引用 4 楼 taodm 的回复:] 楼主，听说过马尔科夫链么？ 没听说过的，就随便糊弄一下就行啦。 之前就看过一个微软亚洲研究院的研究院使用马尔科夫建立一个行为学习模型，用于搜索引擎的广告支付收益最大化的计算。  对于lz的新需求，有种用牛刀杀鸡，大炮轰蚊子的感觉  [/quote]   马尔可夫链（译名有多个，别纠正我了），也不必太认为是大炮啦，用于字符串的基本算法实现是很简单的 有C++的教科书就是用这个作例子  当然你要做更复杂的应用或者理论分析，那是另外一个层面，说高大上才不为过

user: user-5
content: 仅供参考//摘自《代码之美》 // 字符     含义 // .        匹配任意的单个字符 // ^        匹配输入字符串的开头 // $        匹配输入字符串的结尾 // *        匹配前一个字符的零个或者多个出现 #include <stdio.h> int matchhere(char *regexp, char *text);  int matchstar(int c, char *regexp, char *text) {// matchstar: search for c*regexp at beginning of text    do {// a * matches zero or more instances        if (matchhere(regexp, text)) return 1;    } while (*text != '\0' && (*text++ == c || c == '.'));    return 0; } int matchhere(char *regexp, char *text) {// matchhere: search for regexp at beginning of text    if (regexp[0] == '\0') return 1;    if (regexp[1] == '*') return matchstar(regexp[0], regexp+2, text);    if (regexp[0] == '$' && regexp[1] == '\0') return *text == '\0';    if (*text!='\0' && (regexp[0]=='.' || regexp[0]==*text)) return matchhere(regexp+1, text+1);    return 0; }  int match(char *regexp, char *text) {// match: search for regexp anywhere in text     if (regexp[0] == '^') return matchhere(regexp+1, text);     do {// must look even if string is empty         if (matchhere(regexp, text)) return 1;     } while (*text++ != '\0');     return 0; } void main() {     printf("%d==match(abc ,abc)\n",match("abc" ,"abc"));     printf("%d==match(^a  ,abc)\n",match("^a"  ,"abc"));     printf("%d==match(c$  ,abc)\n",match("c$"  ,"abc"));     printf("%d==match(a.c ,abc)\n",match("a.c" ,"abc"));     printf("%d==match(a.*c,abc)\n",match("a.*c","abc"));     printf("-------------------\n");     printf("%d==match(ABC ,abc)\n",match("ABC" ,"abc"));     printf("%d==match(^B  ,abc)\n",match("^B"  ,"abc"));     printf("%d==match(A$  ,abc)\n",match("A$"  ,"abc"));     printf("%d==match(a..c,abc)\n",match("a..c","abc"));     printf("%d==match(a.*d,abc)\n",match("a.*d","abc")); } //1==match(abc ,abc) //1==match(^a  ,abc) //1==match(c$  ,abc) //1==match(a.c ,abc) //1==match(a.*c,abc) //------------------- //0==match(ABC ,abc) //0==match(^B  ,abc) //0==match(A$  ,abc) //0==match(a..c,abc) //0==match(a.*d,abc)

user: user-6
content: 那你应该使用正则表达式，来匹配你的字符。http://blog.csdn.net/lxcnn/article/details/4268033

user: user-1
content: 引用 3 楼 lovesmiles 的回复:[quote=引用 2 楼 u011666331 的回复:] 那你是如何判断关键字的啊？ 看你的关键字是怎么定义，你要是说哈尔滨理工大学的简称是‘黑龙江’，你觉得你搜黑龙江能不能搜到它？显然不能，关键词和原词至少要有数个字是一样的才能称之为关键词吧。你搜‘哈工大’，将哈，工，大三个字分别搜，如果这三个字同时存在一个字符串，这就是你要搜的结果，这时可能会搜到哈尔滨理工大学，也可能搜到哈尔滨工业大学，这从‘哈工大’三个字已经没有办法分出那个结果比较正确。  这是最简单的将词拆成字搜索的办法。复杂一点的就是你自己建立词库，比如‘黑龙江’对应的就是哈尔滨理工大学。那你搜索黑龙江，马上就能搜到它了。  更复杂的词法分析算法说你也不懂了。[/quote]  这应该是最适合公交站牌查询的方法了  C++的STL不是有Map和mutimap的么，用mutimap建立一个公交词库，包含不同的key对应一个value（公交站名）。 每次输入，都获取输入内容，并进行匹配，然后返回value进行选择。

user: user-1
content: 引用 4 楼 taodm 的回复:楼主，听说过马尔科夫链么？ 没听说过的，就随便糊弄一下就行啦。 之前就看过一个微软亚洲研究院的研究院使用马尔科夫建立一个行为学习模型，用于搜索引擎的广告支付收益最大化的计算。  对于lz的新需求，有种用牛刀杀鸡，大炮轰蚊子的感觉

user: user-7
content: C++primer有例子

user: user-8
content: 楼主，听说过马尔科夫链么？ 没听说过的，就随便糊弄一下就行啦。

user: user-9
content: 引用 2 楼 u011666331 的回复:那你是如何判断关键字的啊？ 看你的关键字是怎么定义，你要是说哈尔滨理工大学的简称是‘黑龙江’，你觉得你搜黑龙江能不能搜到它？显然不能，关键词和原词至少要有数个字是一样的才能称之为关键词吧。你搜‘哈工大’，将哈，工，大三个字分别搜，如果这三个字同时存在一个字符串，这就是你要搜的结果，这时可能会搜到哈尔滨理工大学，也可能搜到哈尔滨工业大学，这从‘哈工大’三个字已经没有办法分出那个结果比较正确。  这是最简单的将词拆成字搜索的办法。复杂一点的就是你自己建立词库，比如‘黑龙江’对应的就是哈尔滨理工大学。那你搜索黑龙江，马上就能搜到它了。  更复杂的词法分析算法说你也不懂了。

user: user-0
content: 那你是如何判断关键字的啊？

user: user-9
content: 数据库的sql语句就有模糊查找的关键词 like  select *from table where name like ‘%哈%’ and like ‘%理%’ and like‘%工%’  如果你要用c++。直接用string操作即可，分别查找哈，理，工三个字。如果这三个字都存在，即找到。