LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 760|回复: 10

linux下面有没有通用的中文检索方法!?

[复制链接]
发表于 2004-10-9 02:58:29 | 显示全部楼层 |阅读模式
谢谢!
iconv行么?
发表于 2004-10-9 11:18:07 | 显示全部楼层
iconv只能做到不同字符集之间的转换。如果要进行中文检索,还得自己设计算法。
 楼主| 发表于 2004-10-9 12:21:09 | 显示全部楼层
kj501兄给提供些资料吧。
谢谢了。
发表于 2004-10-9 15:08:06 | 显示全部楼层
我对此没有研究,无能为力,呵呵。。。
 楼主| 发表于 2004-10-10 02:45:22 | 显示全部楼层
写出来了。大家看看可以嘛!

  1. char*
  2. comstrstr(char *string, char *substring)
  3. {
  4.         int i = 0;
  5.         int j;
  6.         int k;

  7.         if(string == NULL || substring == NULL)
  8.                 return NULL;

  9.         while(string[i] != '\0')
  10.         {
  11.                 j = 0;
  12.                 k = i;

  13.                 while(string[k] != '\0'
  14.                         && substring[j] != '\0'
  15.                         && string[k] == substring[j])
  16.                 {
  17.                         k ++;
  18.                         j ++;
  19.                 }

  20.                 if(substring[j] == '\0')
  21.                         return string + i;

  22.                 if(string[i] < 0 && string[i+1] != '\0') /*not ascii*/
  23.                         i += 2;
  24.                 else                     /* ascii*/
  25.                         i += 1;
  26.         }

  27.         return NULL;
  28. }
复制代码
发表于 2004-10-10 08:24:59 | 显示全部楼层
能检中文吗没看出来
 楼主| 发表于 2004-10-10 10:57:43 | 显示全部楼层
最初由 wide288 发表
能检中文吗没看出来

  if(string < 0 && string[i+1] != '\0') /*not ascii*/
                        i += 2;
就是这句关键呀。
因为ascii为0x00 - 0x7f,
其他字体编码的高位一般都是大于0x7f(0111 1111)的字结构。
在计算机中以补码形式存在为:1xxx xxxx
翻译成十进制就是-x,
如果不对其进行处理就有可能出现一个汉字和一个词的前一个字的低位和后一个字的高位匹配,
例如
“恋”  ~ “土地” “闪电”
有了这句将汉字跳过就不会有问题了。
不知道我说得明白否?
发表于 2004-10-10 17:14:31 | 显示全部楼层
倒!楼主的意思原来是检查字符编码中是否有中文字符。不是要实现一个用中文关键字从中文数据中检索的算法。难道这两个中文单词可以同义互换吗?!!
 楼主| 发表于 2004-10-10 17:31:53 | 显示全部楼层
最初由 kj501 发表
倒!楼主的意思原来是检查字符编码中是否有中文字符。不是要实现一个用中文关键字从中文数据中检索的算法。难道这两个中文单词可以同义互换吗?!!

斑竹错误,你好好看看代码,这个不是检查是不是有中文而是检索。
在string中查找substring如果找到返回地址,没有找到返回NULL,这个能实现ascii和中文混排的查找。
发表于 2004-10-10 17:42:39 | 显示全部楼层
sorry! 严重道歉!
由于这两天太忙,压的贴子多了,看花眼了。
不过我觉得检索算法在本质上就是一个字符串的比较,这方面应该有成熟的算法可循,建议你看看有关的资料。
最后,再次道歉!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表