📄 subject_45302.htm
字号:
<p>
序号:45302 发表者:lixiang 发表日期:2003-06-28 22:07:21
<br>主题:如何进行汉字子串的查找?
<br>内容:我要在一个源字符串(包含ASCII字符和汉字的char *)中查找一个中文字符(即两个字节的模式子串), <BR>使用strstr()函数不行, 因为源字串中, 某个汉字的第二个字节与下一个汉字的第一个字节的组合, 可能会与模式子串匹配.<BR>请问有没有什么既简单又高效的方法(最好用纯C, 不用CString或STL中的string)?<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:unknowman 回复日期:2003-07-04 18:54:58
<br>内容:汉字两个字节都大于128
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:LiXueHui 回复日期:2003-07-22 04:06:54
<br>内容:楼上说汉字的两个字节都大与128,即0x80,这只是在对汉字编码了解比较初级的阶段上的说法,比如早期在DOS下显示汉字常常用到UcDOS的16点阵字库Hzk16,一些C语言的教材也讲解如何从Hzk16文件中根据汉字内码得到汉字点阵,其中就有判断是否大于0x80。但是你多用一些汉字,你就会发现显示不了。因为Hzk16只包含了GB码,它只有常用的7000多个汉字,所以用上面提到的方法是不行的,为了用纯C的办法解决上面的问题,就需要用到GBK编码,它是"汉字内码扩展规范“的缩写,共有23940个汉字码位,包括了所有的汉字以及符号。只有查这个表才能完全解决问题。<BR> 我手头有完整的GBK汉字对照表以及所有汉字对应的点阵字库,如果需要,可以和我联系
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:黎离 回复日期:2003-08-03 20:53:26
<br>内容:查找函数:<BR>int findChineseChar(const char* source, //源字符串(包含ASCII字符和汉字的char *)<BR> const char* destination) //一个中文字符(即两个字节的模式子串)<BR>{ <BR> char* p = (char*)source;<BR> int len = strlen(source);<BR><BR> while (p-source < len)<BR> {<BR> if ( *p>=0x80 )<BR> { <BR> if ( *p == *destination && *(p+1)== *(destination+1))<BR> return p-source; //中文字符所在的位置<BR> else <BR> p +=2;<BR> }<BR> else<BR> p ++;<BR> }<BR> return -1; // 表示没有找到指定的汉字字符<BR>}<BR>2003-8-3 22:40:23
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -