如何计算vb6中字符串上的字符数

时间:2014-03-16 13:48:54

标签: vb6

美好的一天!我在visual basic 6.0中遇到了问题 目标是计算多少单词和字符。

例如:

电风扇

单词:2 人物:11

我已经完成了这个词的代码。

但我不知道如何计算角色。 谢谢!

无论如何,这是我的计算单词的代码:

Dim Counter As Integer
Dim StartPos As Integer


If Trim(Text1) = "" Then
    NumOfWords = 0
    Exit Sub
End If

Text1 = Trim(Text1) ' Remove All Spaces

NumOfWords = 1
For Counter = 1 To Len(Text1)
        If Mid(Text1, Counter, 1) = " " Then
                NumOfWords = NumOfWords + 1
        End If
Next Counter

Text2.Text = NumOfWords
Text3.Text = Index

3 个答案:

答案 0 :(得分:2)

在您的示例中,您只使用空格作为单词之间的分隔,因此您可以使用以下代码:

'1 form with:
'  1 textbox: name=Text1
'  2 command buttons: name=Command1    name=Command2
Option Explicit

Private Sub Command1_Click()
  Dim lngWord As Long
  Dim lngWords As Long, lngChars As Long
  Dim strWord() As String
  'split your text over each space
  strWord = Split(Text1.Text, " ")
  'count the words
  lngWords = UBound(strWord)
  'loop over all words and count the chars
  lngChars = 0
  For lngWord = 0 To lngWords
    lngChars = lngChars + Len(strWord(lngWord))
  Next lngWord
  'show the results
  ShowResults lngWords + 1, lngChars
End Sub

Private Sub Command2_Click()
  Dim lngWords As Long, lngChars As Long
  Dim strText As String
  strText = Text1.Text
  'count spaces
  lngWords = Len(strText) - Len(Replace(strText, " ", ""))
  'count all except spaces
  lngChars = Len(strText) - lngWords
  'show the results
  ShowResults lngWords + 1, lngChars
End Sub

Private Sub Form_Load()
  Text1.Text = "Electric Fan"
End Sub

Private Sub ShowResults(lngWords As Long, lngChars As Long)
  MsgBox "Words: " & CStr(lngWords) & vbCrLf & "Chars: " & CStr(lngChars), vbInformation, "Count"
End Sub

Command1和Command2应该给出相同的结果。

Command1可能更容易理解,并为您提供一个包含所有单词的数组。 Command2代码较少:)

一些评论:

  • 单词也可以用。:;()和更多
  • 分隔 当您的文字在新行上继续时,
  • 单词也可以分开
  • 可能有2个分隔字符,中间没有一个字,比如意外的2个空格
  • 单词可以在下一行继续。这应该算作一个单词,但中间有一个换行符,可能是 -

如果你想考虑其他角色,那么你可能必须编写自己的split()或者自己的replace()函数

答案 1 :(得分:1)

这是执行此操作的功能。按照我的预期编写它并不是那么明显。在这里,我假设你只想数字。但情况可能并非如此。有关ASCII字符代码的信息,请参阅http://www.vb6.us/tutorials/vb6-string-functions,并根据单词"字符"的含义修改代码。

Private Function countLetters(str As String) As Integer
    Dim i As Long
    Dim symbol As String

    countLetters = 0
    For i = 1 To Len(str)
        symbol = Mid(str, i, 1)
        If isLetter(symbol) Then
            countLetters = countLetters + 1
        End If
    Next
End Function

Private Function isLetter(symbol As String) As Boolean
    isLetter = (Asc(symbol) >= 65 And Asc(symbol) <= 90) Or (Asc(symbol) >= 97 And Asc(symbol) <= 122) Or Asc(symbol) >= 161
End Function

答案 2 :(得分:1)

您可以使用正则表达式非常接近MS Word的计数器,例如

lNumOfWords = CountWords(TextToCount)

Private Function CountWords(Text As String, Optional Pattern As String = "\S+") As Long
    With CreateObject("VBScript.RegExp")
        .Global = True
        .MultiLine = True
        .Pattern = Pattern
        CountWords = .Execute(Text).Count
    End With
End Function

要计算字符数(无空格),请使用

lNumOfChars = CountWords(TextToCount, "\S")

对于大字符串,可能是一种更高效的字数统计方法,就像这样

lNumOfWords = CountWords(TextToCount, "\b") \ 2

因为在分割边界(\b模式)时,返回的匹配集合将仅包含空字符串。

有关VBScript正则表达式支持模式的更多信息here