今天在論壇中看到一個不算難的問題,是想要能統計出英文單字的個數。由於一開始誤解了其意思,就變成了統計英文字串中字母的個數了。既然都寫了,隨手記錄一下。這問題有很多解法,這邊隨手寫了三個,也希望大家能提供一些不一樣的寫法。

解法一

採用陣列搭配ASCII編碼來記錄出現次數
  Sub Test(ByVal inputString As String) Dim symbolCount(25) As Integer Dim startAscii As Integer = Asc(“a"c) Dim maxSymbolIdx As Integer Dim idx As Integer

    For Each c As Char In inputString
        idx = Asc(c) - startAscii
        symbolCount(idx) = symbolCount(idx) + 1
        If symbolCount(idx) > symbolCount(maxSymbolIdx) Then
            maxSymbolIdx = idx
        End If
    Next

    For idx = 0 To 25
        Console.Write(Chr(startAscii + idx) & ": ")
        Console.WriteLine(symbolCount(idx).ToString)
    Next
    Console.WriteLine()
    Console.Write("Max Count Symbol: ")
    Console.WriteLine(Chr(startAscii + maxSymbolIdx))
End Sub

 

解法二

Sub Test(ByVal inputString As String)
    Dim chars() As Char = inputString.ToCharArray
    Array.Sort(chars)

    Dim maxChar As Char
    Dim maxCount As Integer = 0
    Dim preChar As Char = chars(0)
    Dim count As Integer = 0
    For Each c As Char In chars
        If preChar <> c Then
            Console.Write(preChar & ": ")
            Console.WriteLine(count.ToString)
            preChar = c
            count = 0
        End If
        count += 1
        If count > maxCount Then
            maxCount = count
            maxChar = c
        End If
    Next
    Console.WriteLine()
    Console.Write("Max Count Symbol: ")
    Console.WriteLine(maxChar)
End Sub

解法三

採用Linq的Group By與Order By來做
  Sub Test(ByVal inputString As String) Dim chars() As Char = inputString.ToCharArray Dim linq = From c In chars Group c By c Into Group Order By Group.Count Descending Select New With {.Symbol = c, .Count = Group.Count} For Each item In linq Console.WriteLine(item.Symbol & “: " & item.Count) Next Console.WriteLine() Console.Write(“Max Count Symbol: “) Console.WriteLine(linq(0).Symbol) End Sub