找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 4377|回复: 0

[算法] 取汉字拼音缩写四法

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2009-11-11 21:41:42 | 显示全部楼层 |阅读模式
<p><font face="Verdana">第四种方法:<br/>CLEAR<br/>?汉字缩写("银行")<br/>?hzsx("吕志杰")<br/>#DEFINE cPy "吖八嚓咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗"</font></p>
<p><font face="Verdana">FUNCTION 汉字缩写(汉字 as String)<br/>LOCAL cOut,cTmp<br/>cOut=""<br/>FOR m.i=1 TO LENC(m.汉字)<br/>&nbsp;m.cTmp='z'<br/>&nbsp;FOR m.j=1 TO 26<br/>&nbsp;&nbsp;IF SUBSTRC(m.汉字, m.i, 1) &lt; SUBSTRC(cPy, m.j, 1)<br/>&nbsp;&nbsp;&nbsp;m.cTmp=CHR(95+m.j)<br/>&nbsp;&nbsp;&nbsp;EXIT<br/>&nbsp;&nbsp;ENDIF<br/>&nbsp;ENDFOR<br/>&nbsp;IF m.j=1&amp;&amp;如不是汉字, 则直接返回该字符<br/>&nbsp;&nbsp;m.cTmp=SUBSTRC(m.汉字, m.i, 1)<br/>&nbsp;ENDIF<br/>&nbsp;cOut=cOut+m.cTmp<br/>ENDFOR<br/>RETURN cOut<br/>ENDFUNC</font></p>
<p><font face="Verdana">第一种方法:<br/>hzstr="吕" &amp;&amp;或hzstr="吕志杰"<br/>&nbsp;local py,i,j,c <br/>&nbsp;private p0 <br/>&nbsp;p0="吖八嚓咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗" <br/>&nbsp;py="" <br/>&nbsp;for i=1 to lenc(hzstr) <br/>&nbsp;&nbsp;&nbsp; C='Z'<br/>&nbsp;for j=1 to 26 <br/>&nbsp;&nbsp; if substrc(hzstr,i,1)&lt;substrc(p0,j,1) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C=chr(95+j) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXIT <br/>&nbsp;&nbsp; endif <br/>&nbsp;next <br/>&nbsp;&nbsp;&nbsp; py=py+C <br/>&nbsp;next <br/>?py <br/>**第二种方法:<br/>?hz("吕")<br/>FUNCTION hz( cHanzi)<br/>cHanzi=Alltrim(cHanzi)<br/>cSpy=""<br/>For i=0 To Lenc(cHanzi)<br/>&nbsp;cDanzi=Substrc(cHanzi,i,1)<br/>&nbsp;Do Case<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("啊") And Asc(cDanzi)&lt;Asc("芭")&amp;&amp;A<br/>&nbsp;&nbsp; cSpy=cSpy+"A"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("芭") And Asc(cDanzi)&lt;Asc("擦")&amp;&amp;B<br/>&nbsp;&nbsp; cSpy=cSpy+"B"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("擦") And Asc(cDanzi)&lt;Asc("搭")&amp;&amp;C<br/>&nbsp;&nbsp; cSpy=cSpy+"C"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("搭") And Asc(cDanzi)&lt;Asc("蛾")&amp;&amp;D<br/>&nbsp;&nbsp; cSpy=cSpy+"D"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("蛾") And Asc(cDanzi)&lt;Asc("发")&amp;&amp;E<br/>&nbsp;&nbsp; cSpy=cSpy+"E"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("发") And Asc(cDanzi)&lt;Asc("噶")&amp;&amp;F<br/>&nbsp;&nbsp; cSpy=cSpy+"F"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("噶") And Asc(cDanzi)&lt;Asc("哈")&amp;&amp;G<br/>&nbsp;&nbsp; cSpy=cSpy+"G"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("哈") And Asc(cDanzi)&lt;Asc("击")&amp;&amp;H<br/>&nbsp;&nbsp; cSpy=cSpy+"H"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("击") And Asc(cDanzi)&lt;Asc("喀")&amp;&amp;J<br/>&nbsp;&nbsp; cSpy=cSpy+"J"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("喀") And Asc(cDanzi)&lt;Asc("拉")&amp;&amp;K<br/>&nbsp;&nbsp; cSpy=cSpy+"K"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("拉") And Asc(cDanzi)&lt;Asc("妈")&amp;&amp;L<br/>&nbsp;&nbsp; cSpy=cSpy+"L"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("妈") And Asc(cDanzi)&lt;Asc("拿")&amp;&amp;M<br/>&nbsp;&nbsp; cSpy=cSpy+"M"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("拿") And Asc(cDanzi)&lt;Asc("哦")&amp;&amp;N<br/>&nbsp;&nbsp; cSpy=cSpy+"N"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("哦") And Asc(cDanzi)&lt;Asc("啪")&amp;&amp;O<br/>&nbsp;&nbsp; cSpy=cSpy+"O"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("啪") And Asc(cDanzi)&lt;Asc("期")&amp;&amp;P<br/>&nbsp;&nbsp; cSpy=cSpy+"P"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("期") And Asc(cDanzi)&lt;Asc("然")&amp;&amp;Q<br/>&nbsp;&nbsp; cSpy=cSpy+"Q"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("然") And Asc(cDanzi)&lt;Asc("撒")&amp;&amp;R<br/>&nbsp;&nbsp; cSpy=cSpy+"R"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("撒") And Asc(cDanzi)&lt;Asc("塌")&amp;&amp;S<br/>&nbsp;&nbsp; cSpy=cSpy+"S"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("塌") And Asc(cDanzi)&lt;Asc("挖")&amp;&amp;T<br/>&nbsp;&nbsp; cSpy=cSpy+"T"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("挖") And Asc(cDanzi)&lt;Asc("昔")&amp;&amp;W<br/>&nbsp;&nbsp; cSpy=cSpy+"W"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("昔") And Asc(cDanzi)&lt;Asc("压")&amp;&amp;X<br/>&nbsp;&nbsp; cSpy=cSpy+"X"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("压") And Asc(cDanzi)&lt;Asc("匝")&amp;&amp;Y<br/>&nbsp;&nbsp; cSpy=cSpy+"Y"<br/>&nbsp; Case Asc(cDanzi)&gt;=Asc("匝")&amp;&amp;Z<br/>&nbsp;&nbsp; cSpy=cSpy+"Z"<br/>&nbsp; Otherwise<br/>&nbsp;&nbsp; cSpy=cSpy+cDanzi<br/>&nbsp;Endcase<br/>Endfor<br/>return cSpy<br/>ENDFUNC<br/>**第三种方法<br/>?hz("杰")<br/>&nbsp;FUNCTION hz( STRINGS)<br/>&nbsp;PRIVATE M.NAME , M.NAME1 , M.PINYIN<br/>&nbsp;M.NAME = ALLTRIM(STRINGS)<br/>&nbsp;M.NAME1 = ''<br/>&nbsp;FOR I = 1 TO 2<br/>&nbsp;TEMP = SUBSTR(M.NAME,I,1)<br/>&nbsp;IF ASC(TEMP) &gt; 128<br/>&nbsp;&nbsp;&nbsp; M.NAME1 = M.NAME1 + TEMP<br/>&nbsp;ELSE <br/>&nbsp;&nbsp;&nbsp; RETURN LOWER(SUBSTR(M.NAME,1,1))<br/>&nbsp;&nbsp;&nbsp; RETURN <br/>&nbsp;ENDIF <br/>&nbsp;ENDFOR <br/>&nbsp;PINYINLEN = LEN(M.NAME1) / 2<br/>&nbsp;IF PINYINLEN &gt; 8<br/>&nbsp;PINYINLEN = 8<br/>&nbsp;ENDIF <br/>&nbsp;M.PINYIN = ''<br/>&nbsp;FOR I = 1 TO PINYINLEN<br/>&nbsp;PTR =&nbsp; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASC(SUBSTR(M.NAME1,2 * (I - 1) + 1,1)) * 256 + ASC(SUBSTR(M.NAME1,2 * I,1))<br/>&nbsp;IF PTR &gt;= 45217 AND PTR &lt;= 45252<br/>&nbsp;&nbsp;&nbsp; TEMP = 'a'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 45253 AND PTR &lt;= 45760<br/>&nbsp;&nbsp;&nbsp; TEMP = 'b'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 45761 AND PTR &lt;= 46317<br/>&nbsp;&nbsp;&nbsp; TEMP = 'c'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 46318 AND PTR &lt;= 46825<br/>&nbsp;&nbsp;&nbsp; TEMP = 'd'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 46826 AND PTR &lt;= 47009<br/>&nbsp;&nbsp;&nbsp; TEMP = 'e'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 47010 AND PTR &lt;= 47296<br/>&nbsp;&nbsp;&nbsp; TEMP = 'f'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 47297 AND PTR &lt;= 47613<br/>&nbsp;&nbsp;&nbsp; TEMP = 'g'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 47614 AND PTR &lt;= 48118<br/>&nbsp;&nbsp;&nbsp; TEMP = 'h'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 48119 AND PTR &lt;= 49061<br/>&nbsp;&nbsp;&nbsp; TEMP = 'j'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 49062 AND PTR &lt;= 49323<br/>&nbsp;&nbsp;&nbsp; TEMP = 'k'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 49324 AND PTR &lt;= 49895<br/>&nbsp;&nbsp;&nbsp; TEMP = 'l'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 49896 AND PTR &lt;= 50370<br/>&nbsp;&nbsp;&nbsp; TEMP = 'm'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 50371 AND PTR &lt;= 50613<br/>&nbsp;&nbsp;&nbsp; TEMP = 'n'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 50614 AND PTR &lt;= 50621<br/>&nbsp;&nbsp;&nbsp; TEMP = 'o'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 50622 AND PTR &lt;= 50905<br/>&nbsp;&nbsp;&nbsp; TEMP = 'p'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 50906 AND PTR &lt;= 51386<br/>&nbsp;&nbsp;&nbsp; TEMP = 'q'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 51387 AND PTR &lt;= 51445<br/>&nbsp;&nbsp;&nbsp; TEMP = 'r'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 51446 AND PTR &lt;= 52217<br/>&nbsp;&nbsp;&nbsp; TEMP = 's'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 52218 AND PTR &lt;= 52697<br/>&nbsp;&nbsp;&nbsp; TEMP = 't'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 52698 AND PTR &lt;= 52979<br/>&nbsp;&nbsp;&nbsp; TEMP = 'w'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 52980 AND PTR &lt;= 53640<br/>&nbsp;&nbsp;&nbsp; TEMP = 'x'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 53689 AND PTR &lt;= 54480<br/>&nbsp;&nbsp;&nbsp; TEMP = 'y'<br/>&nbsp;ENDIF <br/>&nbsp;IF PTR &gt;= 54481 AND PTR &lt;= 55289<br/>&nbsp;&nbsp;&nbsp; TEMP = 'z'<br/>&nbsp;ENDIF <br/>&nbsp;IF TEMP &lt;&gt; '0'<br/>&nbsp;&nbsp;&nbsp; M.PINYIN = M.PINYIN + TEMP<br/>&nbsp;ENDIF <br/>&nbsp;ENDFOR <br/>RETURN M.PINYIN<br/>ENDFUNC</font></p>
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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