taishantop 发表于 2009-2-16 16:51:04

如何获取中文字符串的首拼

比如“汉字”那么得到H,只需要字符串第一个中文字符的首拼就可以了。谢谢。。。。。。。

[ 本帖最后由 taishantop 于 2009-2-16 22:40 编辑 ]

大绯狼 发表于 2009-2-16 19:11:13

这个东西你得有一个数据库。。。。哪里这么简单

文白 发表于 2009-2-16 19:28:03

获取中文首字母+数字+英文 返回大写英文

Global $AscII = [,,,,,,,,,,,,,,,,,,,,,,,]

Func _StringToLetter($sString)
        Local $sReturn = ''
        Local $sStringLen = StringLen($sString)
        For $sI = 1 To $sStringLen
                $sReturn &= _Letter2Alphabet(StringMid($sString,$sI,1))
        Next
        Return $sReturn
EndFunc

Func _Letter2Alphabet($sLetter)
        If BinaryLen(StringToBinary($sLetter, 4)) = 3 Then $sLetter &= Chr(0)
        Return _Num2Alphabet(Dec(StringTrimLeft(StringToBinary($sLetter),2)))
EndFunc

Func _Num2Alphabet($sDigital)
        For $sI = 0 To 22
                If BitAND($sDigital>=$AscII[$sI],$sDigital<$AscII[$sI+1]) Or $sDigital=$AscII[$sI] Or $sDigital=32+$AscII[$sI] Then Return Chr($AscII[$sI])
        Next
        For $sI = 48 To 57
                If $sDigital=$sI Then Return Chr($sI)
        Next
        Return ''
EndFunc

文白 发表于 2009-2-16 19:39:55

这个应该能满足你的要求

返回字符串中第一个汉字的首写字母
Global $AscII = [,,,,,,,,,,,,,,,,,,,,,,,]

Func _String2Alphabet($sString)
        Local $sLetter
        $sStringLen = StringLen($sString)
        For $sI = 1 To $sStringLen
                $sLetter = StringMid($sString,$sI,1)
                If BinaryLen(StringToBinary($sLetter, 4)) = 3 Then
                        Return _Num2Alphabet(Dec(StringTrimLeft(StringToBinary($sLetter & Chr(0)),2)))
                EndIf
        Next
        Return ''
EndFunc

Func _Num2Alphabet($sDigital)
        For $sI = 0 To 22
                If BitAND($sDigital>=$AscII[$sI],$sDigital<$AscII[$sI+1]) Then Return Chr($AscII[$sI])
        Next
        Return ''
EndFunc

大绯狼 发表于 2009-2-16 20:55:51

我靠 受教了!!!

taishantop 发表于 2009-2-16 22:28:07

佩服

确实好用。小弟先谢过了。。。。。。。。。。

sxd 发表于 2009-2-17 11:32:29

对文件编码 汉字编码等 一直很迷茫 囧rz

范统.贾 发表于 2009-2-19 16:34:05

学习一下。

xhz520 发表于 2012-12-5 01:02:00

学习一下。

netegg 发表于 2012-12-5 01:28:13

本帖最后由 netegg 于 2012-12-5 01:53 编辑

/** 获取一个汉字的拼音首字母。
  * GB码两个字节分别减去160,转换成10进制码组合就可以得到区位码
  * 例如汉字“你”的GB码是0xC4/0xE3,分别减去0xA0(160)就是0x24/0x43
  * 0x24转成10进制就是36,0x43是67,那么它的区位码就是3667,在对照表中读音为‘n’
  */
区位码拼音范围百度下,http://wenku.baidu.com/view/343ac319964bcf84b9d57b7d.html
;区位码表
;a:1601~1636
;b:1637~1832
;c:1833~2077
;d:2078~2273
;e:2274~2301
;f:2302~2432
;g:2433~2593
;h:2594~2786
;j:2787~3105
;k:3106~3211
;l:3212~3471
;m:3472~3634
;n:3635~3721
;o:3722~3729
;p:3730~3857
;q:3858~4026
;r:4027~4085
;s:4086~4389
;t:4390~4557
;w:4558~4683
;x:4684~4924
;y:4925~5216
;z:5217~5589

afan 发表于 2012-12-5 02:02:44

/** 获取一个汉字的拼音首字母。
  * GB码两个字节分别减去160,转换成10进制码组合就可以得到区位码
  ...
netegg 发表于 2012-12-5 01:28 http://www.autoitx.com/images/common/back.gif


    你LS典型的挖坟,顺便把你带进去了……

netegg 发表于 2012-12-5 02:16:57

回复 11# afan
没,编码转换这部分迟早要折腾,和加解密有关系,放着当收藏了

tubaba 发表于 2015-7-22 10:46:43

二级汉字不在此范围内,应该如何做?

zzwwdd 发表于 2017-8-29 06:54:16

Global $AscII = [,,,,,,,,,,,,,,,,,,,,,,,]

Func _StringToLetter($sString)
      Local $sReturn = ''
      Local $sStringLen = StringLen($sString)
      For $sI = 1 To $sStringLen
                $sReturn &= _Letter2Alphabet(StringMid($sString,$sI,1))
      Next
      Return $sReturn
EndFunc

Func _Letter2Alphabet($sLetter)
      If BinaryLen(StringToBinary($sLetter, 4)) = 3 Then $sLetter &= Chr(0)
      Return _Num2Alphabet(Dec(StringTrimLeft(StringToBinary($sLetter),2)))
EndFunc

Func _Num2Alphabet($sDigital)
      For $sI = 0 To 22
                If BitAND($sDigital>=$AscII[$sI],$sDigital<$AscII[$sI+1]) Or $sDigital=$AscII[$sI] Or $sDigital=32+$AscII[$sI] Then Return Chr($AscII[$sI])
      Next
      For $sI = 48 To 57
                If $sDigital=$sI Then Return Chr($sI)
      Next
      Return ''
EndFunc

MsgBox(4096,'te',_StringToLetter("中国人"))

为什么是空白啊?
页: [1]
查看完整版本: 如何获取中文字符串的首拼