当前位置:编程学习 > VB >>

vb6中如何实现:给出一个汉字,求出该汉字拼音的声母。如给出一个“为”字(拼音是wei),如何得到声母w。

假设一个函数x()能实现这个功能,应该是x("为")返回w。如何实现?
--------------------编程问答-------------------- 问题有点意思啊,我也不知道正解是什么,不过刚才我写了一段代码,看看是否对你有提示
Private Sub Command1_Click()
    
     Debug.Print "ASCII 阿="; Asc("阿")
     Debug.Print "ASCII 巴="; Asc("巴")
     Debug.Print "ASCII 擦="; Asc("擦")
     Debug.Print "ASCII 嗒="; Asc("嗒")
     Debug.Print "ASCII 诶="; Asc("诶")
     Debug.Print "ASCII 发="; Asc("发")
     Debug.Print "ASCII 呷="; Asc("呷")
     Debug.Print "ASCII 哈="; Asc("哈")
     Debug.Print "..."
     Debug.Print "ASCII 呀="; Asc("呀")
     Debug.Print "ASCII 咋="; Asc("咋")
    
End Sub

运行结果如下:

ASCII 阿=-20318 
ASCII 巴=-20275 
ASCII 擦=-19775 
ASCII 嗒=-8022 
ASCII 诶=-9536 
ASCII 发=-18526 
ASCII 呷=-8248 
ASCII 哈=-17922 
...
ASCII 呀=-11843 
ASCII 咋=-10842 --------------------编程问答-------------------- 修改刚才的代码如下:
Private Sub Command1_Click()
     Debug.Print "ASCW 阿="; AscW("阿")
     Debug.Print "ASCW 巴="; AscW("巴")
     Debug.Print "ASCW 擦="; AscW("擦")
     Debug.Print "ASCW 嗒="; AscW("嗒")
     Debug.Print "ASCW 诶="; AscW("诶")
     Debug.Print "ASCW 发="; AscW("发")
     Debug.Print "ASCW 呷="; AscW("呷")
     Debug.Print "ASCW 哈="; AscW("哈")
     Debug.Print "..."
     Debug.Print "ASCW 呀="; AscW("呀")
     Debug.Print "ASCW 咋="; AscW("咋")
End Sub

运行结果:
ASCW 阿=-27073 
ASCW 巴= 24052 
ASCW 擦= 25830 
ASCW 嗒= 21970 
ASCW 诶=-29706 
ASCW 发= 21457 
ASCW 呷= 21623 
ASCW 哈= 21704 
...
ASCW 呀= 21568 
ASCW 咋= 21643 --------------------编程问答-------------------- Private Sub Command1_Click()
     Debug.Print "AscB 阿="; AscB("阿")
     Debug.Print "AscB 巴="; AscB("巴")
     Debug.Print "AscB 擦="; AscB("擦")
     Debug.Print "AscB 嗒="; AscB("嗒")
     Debug.Print "AscB 诶="; AscB("诶")
     Debug.Print "AscB 发="; AscB("发")
     Debug.Print "AscB 呷="; AscB("呷")
     Debug.Print "AscB 哈="; AscB("哈")
     Debug.Print "..."
     Debug.Print "AscB 呀="; AscB("呀")
     Debug.Print "AscB 咋="; AscB("咋")
End Sub


运行结果:
AscB 阿= 63 
AscB 巴= 244 
AscB 擦= 230 
AscB 嗒= 210 
AscB 诶= 246 
AscB 发= 209 
AscB 呷= 119 
AscB 哈= 200 
...
AscB 呀= 64 
AscB 咋= 139 --------------------编程问答-------------------- '****************调用******************
 MsgBox pysy("为")


'**************模块声明****************
Private Const IME_ESC_MAX_KEY = &H1005
Private Const IME_ESC_IME_NAME = &H1006
Private Const GCL_REVERSECONVERSION = &H2
Private Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, lpList As Long) As Long
Private Declare Function ImmEscape Lib "imm32.dll" Alias "ImmEscapeA" (ByVal hkl As Long, ByVal himc As Long, ByVal un As Long, lpv As Any) As Long
Private Declare Function ImmGetConversionList Lib "imm32.dll" Alias "ImmGetConversionListA" (ByVal hkl As Long, ByVal himc As Long, ByVal lpsz As String, lpCandidateList As Any, ByVal dwBufLen As Long, ByVal uFlag As Long) As Long
Private Declare Function IsDBCSLeadByte Lib "Kernel32" (ByVal bTestChar As Byte) As Long


Public Function GetChineseSpell(Chinese As String, Optional Delimiter As String = " ", Optional IMEName As String = "微软拼音输入法", Optional BufferSize As Long = 255) As String
If Len(Trim(Chinese)) > 0 Then
 Dim i As Long
 Dim s As String
 s = Space(BufferSize)
 Dim IMEInstalled As Boolean
 Dim j As Long
 Dim a() As Long
 
 ReDim a(BufferSize) As Long
 j = GetKeyboardLayoutList(BufferSize, a(LBound(a)))

 For i = LBound(a) To LBound(a) + j - 1
   If ImmEscape(a(i), 0, IME_ESC_IME_NAME, ByVal s) Then
     If Trim(IMEName) = Replace(Trim(s), Chr(0), "") Then
      IMEInstalled = True
      Exit For
     End If
   End If
 Next i
 If IMEInstalled Then
   Chinese = Trim(Chinese)
   Dim sChar As String
   Dim Buffer0() As Byte
   Dim bBuffer0() As Byte
   Dim bBuffer() As Byte
   Dim K As Long
   Dim l As Long
   Dim m As Long
   For j = 0 To Len(Chinese) - 1
     sChar = Mid(Chinese, j + 1, 1)
     Buffer0 = StrConv(sChar, vbFromUnicode)
     If IsDBCSLeadByte(Buffer0(0)) Then
      K = ImmEscape(a(i), 0, IME_ESC_MAX_KEY, Null)
      If K Then
        l = ImmGetConversionList(a(i), 0, sChar, 0, 0, GCL_REVERSECONVERSION)
        If l Then
         s = Space(BufferSize)
         If ImmGetConversionList(a(i), 0, sChar, ByVal s, l, GCL_REVERSECONVERSION) Then
           
           bBuffer0 = StrConv(s, vbFromUnicode)
           ReDim bBuffer(K * 2 - 1)
           For m = bBuffer0(24) To bBuffer0(24) + K * 2 - 1
             bBuffer(m - bBuffer0(24)) = bBuffer0(m)
           Next m
           sChar = Trim(StrConv(bBuffer, vbUnicode))
           If InStr(sChar, vbNullChar) Then
            sChar = Trim(Left(sChar, InStr(sChar, vbNullChar) - 1))
           End If
           sChar = Left(sChar, Len(sChar) - 1) & IIf(j < Len(Chinese) - 1, Delimiter, "")
           
         End If
         
        End If
      End If
     End If
     GetChineseSpell = GetChineseSpell & sChar
   Next j
 Else
    GetChineseSpell = " "
 End If
Else
 GetChineseSpell = ""
End If
End Function



Function pysy(s0$) As String
Dim i%, K%, k1%, k2%, s$, s1$, a&, s2$
    
    On Error Resume Next
        K = Len(s0): s = "": s0 = UCase$(s0)
        For i = 1 To K
            s2 = Mid$(s0, i, 1): a = Asc(s2)
            If a < 0 Then
                a = a + 65536
                k1 = a \ 256: k2 = a Mod 256
                K = (k1 - 160) * 100 + k2 - 160
                s1 = ""
                If K > 8794 Then
                    s1 = ""
                ElseIf K >= 5601 Then
                    s1 = GetChineseSpell(s2)
                ElseIf K >= 5249 Then
                    s1 = "Z"
                ElseIf K >= 4925 Then
                    s1 = "Y"
                ElseIf K >= 4684 Then
                    s1 = "X"
                ElseIf K >= 4558 Then
                    s1 = "W"
                ElseIf K >= 4390 Then
                    s1 = "T"
                ElseIf K >= 4086 Then
                    s1 = "S"
                ElseIf K >= 4027 Then
                    s1 = "R"
                ElseIf K >= 3858 Then
                    s1 = "Q"
                ElseIf K >= 3730 Then
                    s1 = "P"
                ElseIf K >= 3722 Then
                    s1 = "O"
                ElseIf K >= 3635 Then
                    s1 = "N"
                ElseIf K >= 3472 Then
                    s1 = "M"
                ElseIf K >= 3212 Then
                    s1 = "L"
                ElseIf K >= 3106 Then
                    s1 = "K"
                ElseIf K >= 2787 Then
                    s1 = "J"
                ElseIf K >= 2594 Then
                    s1 = "H"
                ElseIf K >= 2433 Then
                    s1 = "G"
                ElseIf K >= 2302 Then
                    s1 = "F"
                ElseIf K >= 2274 Then
                    s1 = "E"
                ElseIf K >= 2078 Then
                    s1 = "D"
                ElseIf K >= 1833 Then
                    s1 = "C"
                ElseIf K >= 1637 Then
                    s1 = "B"
                ElseIf K >= 1601 Then
                    s1 = "A"
                End If
                s = s & s1
            Else
                s = s & Chr$(a)
            End If
        Next i
    pysy = s
    On Error GoTo 0
End Function
--------------------编程问答-------------------- 拷贝回去学学。
刚才也看到一贴问题类似,阿勇和小仙妹都有解。 --------------------编程问答-------------------- 看看是不是这个
Option Explicit
Dim col As New Collection

Private Sub Command1_Click()
Dim str1 As String, ascii As Integer, i As Integer
Dim j As Integer
str1 = Text1.Text
For j = 1 To Len(str1)
    ascii = Asc(Mid(str1, j, 1))
    If ascii < Asc(Left(col.Item(1), 1)) Then
        'Debug.Print "不是简体汉字"
    ElseIf ascii >= Asc("匝") And ascii <= Asc("座") Then
       Debug.Print "Z";
    ElseIf ascii > Asc("座") Then
       ' Debug.Print "不是简体汉字"
    Else
        For i = 1 To col.Count - 1
            If ascii >= Asc(Left(col.Item(i), 1)) And ascii < Asc(Left(col.Item(i + 1), 1)) Then
                Debug.Print Right(col.Item(i), 1);
            End If
        Next i
    End If

Next j
Debug.Print
End Sub

Private Sub Form_Load()
col.Add "啊:A"
col.Add "芭:B"
col.Add "擦:C"
col.Add "搭:D"
col.Add "蛾:E"
col.Add "发:F"
col.Add "噶:G"
col.Add "哈:H"
col.Add "击:J"
col.Add "喀:K"
col.Add "垃:L"
col.Add "妈:M"
col.Add "拿:N"
col.Add "哦:O"
col.Add "啪:P"
col.Add "期:Q"
col.Add "然:R"
col.Add "撒:S"
col.Add "塌:T"
col.Add "挖:W"
col.Add "昔:X"
col.Add "压:Y"
col.Add "匝:Z"
End Sub --------------------编程问答-------------------- 下面的网址就是一个例子:
http://smallfairy.51.net/KiteGirl/PYGet.htm --------------------编程问答-------------------- 如何求“只”、“吃”、“是”的声母zh、ch、sh(不是求z、c、s)
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,