如何统计一篇文章中,有多少个中文字(含重复的)和多少个中文字(不含重复的)
急需代码,送100分

解决方案 »

  1.   

    太麻烦了.不如用word打开文章,然后点:工具--字数统计.
      

  2.   

    要准确地统计字数,可逐一将字符串转换为ASCII码,依据其值判断是为中文字符还是英文字符。0——127之间的为大小写字母及数字、半角标点符号、回车、换行等,中文字符的ASCII值则不在0——127之列了。这样,纯汉字的字数统计是很容易的,倒是英文的统计复杂,因为英文统计应以单词为单位,而要判断是否为单词并不是简单的事。我们可以这么处理:如果被检测的字符为大小写字母,则判断其后面的字符是否为一个单词的标志(如空格、标点符号、回车符等),如是,则判断为一个单词。
    以下代码能较准确地统计出TextBox控件中的中、英文字数和数字字符数,并将全部字节数(含各种控制符如回车等)也统计出来。适用于中英文编排环境。'窗体级声明
    Dim c As Long, e_word As Long '中英文字数
    Dim Num As Long, s As Long '数字及全部字符数'统计——
    Private Sub Command1_Click()Dim Str As String '总字符
    Dim k As Long '计数器
    Dim tmpStr As String '逐一检测的字符c = 0: e_word = 0: Num = 0: s = 0 '清空变量
    Str = Text1.Text & " " '加一空格便于意外时计算最后一个字符
    For k = 1 To Len(Str) - 1
    tmpStr = Mid$(Str, k, 1)If Asc(tmpStr) >= 65 And Asc(tmpStr) <= 90 Then '小写字母
    If Asc(Mid$(Str, k + 1, 1)) <= 64 Then e_word = e_word + 1
    If Asc(Mid$(Str, k + 1, 1)) > 90 And Asc(Mid$(Str, k + 1, 1)) < 97 Then e_word = e_word + 1
    If Asc(Mid$(Str, k + 1, 1)) > 122 Then e_word = e_word + 1
    If Asc(Mid$(Str, k + 1, 1)) = 39 Or Asc(Mid$(Str, k + 1, 1)) = 45 Then e_word = e_word - 1 '是符号'或-时
    ElseIf Asc(tmpStr) >= 97 And Asc(tmpStr) <= 122 Then '大写字母
    If Asc(Mid$(Str, k + 1, 1)) < 65 Then e_word = e_word + 1
    If Asc(Mid$(Str, k + 1, 1)) > 90 And Asc(Mid$(Str, k + 1, 1)) < 97 Then e_word = e_word + 1
    If Asc(Mid$(Str, k + 1, 1)) > 122 Then e_word = e_word + 1
    If Asc(Mid$(Str, k + 1, 1)) = 39 Or Asc(Mid$(Str, k + 1, 1)) = 45 Then e_word = e_word - 1 '是符号'或-时
    ElseIf Asc(tmpStr) >= 48 And Asc(tmpStr) <= 57 Then '阿拉伯数字数字
    If Asc(Mid$(Str, k + 1, 1)) < 48 Or Asc(Mid$(Str, k + 1, 1)) > 57 Then Num = Num + 1
    ElseIf Asc(tmpStr) > 127 Or Asc(tmpStr) < 0 Then '中文字符
    c = c + 1
    End If
    Nexts = LenB(StrConv(Text1.Text, vbFromUnicode)) '全部字符MsgBox "本文共有:" & vbCrLf & vbCrLf & "汉字字数: " & c & _
    " 个 (含全角标点)" & vbCrLf & "英文单词: " & e_word & " 个 (不含半角标点)" & vbCrLf & _
    "数字: " & Num & " 个" & vbCrLf & "全部字节: " & s & " 个", vbInformation, "字数统计"
      

  3.   

    yoki(小马哥) 的代码很好啊!!!
      

  4.   

    yoki(小马哥) 的代码很好啊!!!
    谢谢小马哥另外,可否统计出多少个中文字(不含重复的)???多谢了,小妹
      

  5.   

    '首先引用Microsoft Scripting RuntimePrivate Sub Command1_Click()
        MsgBox "共有中文字符(不重复):" + CStr(getchscharnum(Text1.Text))
    End Sub
    Private Function getchscharnum(ByVal str As String) As Long
        Dim mydict As New Dictionary
        Dim i As Long, temp As String
        For i = 1 To Len(str)
            temp = Mid(str, i, 1)
            If Asc(temp) < 0 Then
                If mydict.Exists(temp) = False Then
                    mydict.Add temp, CStr(i)
                End If
            End If
        Next
        getchscharnum = mydict.Count
        Set mydict = Nothing
    End Function
      

  6.   

    yoki(小马哥)的代码中好象有BUG吧,大家发现没有?并不能统计出英文单词数(如果文本中含有'-),而且统计出的英文字母数会少掉N个(N是'和-的总个数),好象还要插入一些代码才行啊.我是个菜鸟,刚学VB十多天,不知道我的判断对不对,(这段代码我没有用VB测试,只是我的判断).如果我的判断不对,大家别揍我呀!!
      

  7.   

    to: yoki(小马哥)  
    文字符的ASCII值则不在0——127之列了 ,日文韩文这些双字节的也不在吧!?
      

  8.   

    太感谢大家乐,
    尤其是yoki(小马哥), rainstormmaster。
      

  9.   

    判断字符的ascii码。楼上的都说得那么好,我就凑个分子吧。