[AccessD] Count the occurrences of each character in a string
Stuart McLachlan
stuart at lexacorp.com.pg
Mon Sep 5 06:31:24 CDT 2022
For a Unicode string with potentially thousands of code points, you don't want an array of all
possible values.
You can do it with an array the same size as the string length
A bit more complicated than the previous code, but this one works well with either ANSI or
Unicode strings.
Function Lettercount(sInputString As String, CaseSensitive As Boolean) As Long
Dim lStr As Long, x As Long, y As Long, compare As Long
Dim sTxt As String
Dim freq() As Long
'Initialise
sTxt = sInputString 'we are going to modify the string!
If CaseSensitive = True Then
compare = vbBinaryCompare
Else
compare = vbTextCompare
End If
lStr = Len(sTxt)
ReDim freq(1 To lStr)
'Get the letter counts
For x = 1 To lStr
freq(x) = 1
For y = x + 1 To lStr
If StrComp(Mid$(sTxt, x, 1), Mid$(sTxt, y, 1), compare) = 0 Then
freq(x) = freq(x) + 1
Mid$(sTxt, y, 1) = Chr$(0)
End If
Next
Next
'Display the results
For x = 1 To lStr
If Mid$(sTxt, x, 1) <> Chr$(0) Then
Debug.Print Mid$(sTxt, x, 1) & " - " & str$(freq(x))
End If
Next
End Function
On 5 Sep 2022 at 19:29, Stuart McLachlan wrote:
> Classic "bucket" or "pigeon hole" application.
>
> For ANSI strings:
>
> DIm arr(32 to 255) 'assumes only printable values
> for x = 1 to len(strTest)
> y = aSC(mid$(strTest,x,1)
> arr(y) = arr(y) + 1
> next
> for x = 32 to 255
> if arr(x) > 0 then debug.print chr$(x) & " - " & str$(arr(x)) next
>
>
> If it's a Wide String that can contain any Unicode point, then you
> really need to use a more complex solution such as a BTree or a
> Collection where you check whether you already have an item with a key
> matching the current character code and either add it or increment its
> value.
>
>
>
> On 5 Sep 2022 at 4:43, Arthur Fuller wrote:
>
> > I'm trying to figure out the best way to count the occurrences of
> > each character in a string. Sample string: "mississipi" I should get
> > back an array looking like this:
> >
> > Character Count
> > m 1
> > i 4
> > s 4
> > p 1
> >
> > Any suggestions?
> >
> > --
> > Arthur
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > https://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
> >
>
>
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> https://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
>
More information about the AccessD
mailing list