[搜索]一种分词方法的实现

加上有一句话,thisisabook,要将之分成合适的单词,假设有一个字典,这个字典包含单词。

我刚看到这个需求,第一反应是用搜索中的分词方式,最大匹配法,后来经过高人指点,说不用,只需要遇到正确的单词就分出来,然后又想到了回溯法,再次经高人指点,回溯也不需要,只需要递归即可。下面是简单的实现代码,供参考:

char *dict[]={"a","is","book","boo","this"};
bool isword(char* wd)
{
	for(int i=0;i<sizeof(dict)/sizeof(dict[0]);i++)
	{
		if(strcmp(dict[i],wd) == 0)
			return true;
	}
	return false;
}
bool splitter(const char* src)
{
	char word[100]={0};
	int i=0;
	int nlen = strlen(src);
	if(nlen == 0)
		return true;
	for(i=0;i<nlen;i++)
	{
		strncpy(word,src,i+1);
		if(isword(word))
		{
			if(splitter(src+i+1))
			{
				printf("word=%s\n",word);
				return true;
			}
		}

	}
	if(i >= nlen)
		return false;
	return true;
}

假设调用splitter("thisisabook");则执行结果为:

word=book

word=a

word=is

word=this

有没有办法从前往后输出单词呢?

时间: 2024-08-30 03:57:15

[搜索]一种分词方法的实现的相关文章

[搜索]一种分词的实现(2)

上文提到 http://blog.csdn.net/zhanghaiyang9999/article/details/41864169 能否顺序打印单词. 顺序打印单词代码如下: char *dict[]={"a","is","book","boo","this"}; bool isword(char* wd) { for(int i=0;i<sizeof(dict)/sizeof(dict[0]);

几种排序方法的实现(更新中)

插入排序: 1).直接插入排序: 假设当前排序到了第i个元素arr[i],则此时i左侧[0,i-1]已经有序,对于arr[i]来说,如果arr[i]>=arr[i-1],则不用排序,直接进入[i+1];否则要在左侧有序表中找到一个合适的位置j令arr[j]<=arr[i]<arr[j+1]. 每一趟插入排序,令当前有序表的长度增加1,直至有序长度等于数组长度. class Solution { public: void InsertSort(vector<int>&

python几种排序算法和二分查找方法的实现

一.算法概念 - 含义:算法就是对问题进行处理且求解的一种实现思路或者思想. 评判程序优劣的方法 - 消耗计算机资源和执行效率(无法直观) 计算算法执行的耗时(不推荐,因为会受机器和执行环境的影响) 时间复杂度(推荐) 时间复杂度 - 评判规则:量化算法执行的操作/执行步骤的数量, - 如下列 def sumOfN(n): # 执行一步: theSum = 0 for i in range(1,n+1): # 下式一共执行n步,for循环不算一步,因为它是控制循环次数的 theSum = the

matchesSelector及低版本IE中对该方法的实现

matchesSelector用来匹配dom元素是否匹配某css selector.它为一些高级方法的实现提供了基础支持,比如事件代理,parent, closest等. W3C在2006年就提出了该方法草案,Firefox和Safari相继实现,比如 ? 1 2 3 4 5 6 <div id="wraper" class="item"></div> <script>     wraper.mozMatchesSelector(

android客户端向服务器端验证登陆方法的实现2

一.在上一篇文章中,我只是提到了其中一种方法来实现登陆 大家可以参见: http://www.apkbus.com/android-45004-1-1.html      android获取web服务器端session并验证登陆 http://blog.csdn.net/cainiao123hack/article/details/8255848   服务器端向Android客户端传值--登录实现 http://zhidao.baidu.com/link?url=8g9EWhyUkUgUr1dh

大话设计模式实战之工厂方法的实现——链接数据库应用

工厂方法的优点在这里不说了,网上搜索一大堆,自己看 如果使用JDBC链接数据库,数据库从MySql切换到Oracle,需要改动的就是切换一下驱动的名称,其他的都不需要修改,这就是工厂方法灵活性的一个直接的例子 纸上谈兵空谈 上代码: public abstract class AbstractSqlFactory { //这个就是泛型的类的实例就是需要控制的在JDK1.5中的特性 public abstract <T extends SqlUtil> T createSql(Class<

搜索引擎--范例:中英文混杂分词算法的实现--正向最大匹配算法的原理和实现

纯中文和中英文混杂的唯一区别是,分词的时候你如何辨别一个字符是英文字符还是孩子字符, 人眼很容易区分,但是对于计算机来说就没那么容易了,只要能辨别出中文字符和英文的字符,分词本身就不是一个难题 1:文本的编码问题: utf8:windows下,以utf8格式保存的文本是一个3个字节(以16进制)的BOM的,并且你不知道一个汉字是否是用3位表示,但是英文适合ascii编码一样的 ascii:英文一位,中文两位,并且中文的第一个字节的值是大于128和,不会和英文混淆,推荐 unicode:中文基本是

android客户端向服务器端验证登陆方法的实现1

遇到的问题:一个条件查询与多个条件查询,所用到的方式不一样 参考文档: http://www.oschina.net/question/1160609_133366    mybatis多条件查询的一个错误 解决方案如下: 利用序列号的方式解决多个参数的查询问题.对象与数据库关系的映射层. 层次结构如下: 首先定义model层里面的Userlist类,这是和我们后台mysql里面的表是一一对应的,然后定义UserlistMapper类,这个类主要是用来封装一些个方法,比如说增删改查等.其实现通过

深入分析Object.finalize方法的实现原理

“物有本末,事有始终.知其先后,则近道矣” finalize 如果类中重写了finalize方法,当该类对象被回收时,finalize方法有可能会被触发,下面通过一个例子说明finalize方法对垃圾回收有什么影响. public class FinalizeCase { private static Block holder = null; public static void main(String[] args) throws Exception { holder = new Block(