Количество вхождений в строку - PullRequest
0 голосов
/ 07 декабря 2009

Я абсолютный новичок в том, что касается визуальной основы. В классе мне нужно сделать следующее: «Напишите программу, которая запрашивает предложение у пользователя, а затем записывает, сколько раз встречается каждая буква алфавита».

Как бы я посчитал количество вхождений в строке?

Спасибо и извините за вопрос noob.

Ответы [ 6 ]

4 голосов
/ 08 декабря 2009

Цикл и добавить в список

Dim s As String = "tafata"
Dim count As New Dictionary(Of Char, Integer)()
For i As Integer = 0 To s.Length - 1
    count(s(i)) = (If(count.ContainsKey(s(i)), count(s(i)) + 1, 1))
Next

Не работал с linq, но я думаю, вы можете попробовать

Dim s As String = "tafata"
Dim t = From c In s _
Group c By c Into Group _
Select Group
1 голос
/ 13 декабря 2009

Быстрый и грязный путь:

Public Function CountInStr(ByVal value As String, ByVal find As String, Optional compare As VbCompareMethod = VbCompareMethod.vbBinaryCompare) As Long
    CountInStr = (LenB(value) - LenB(Replace(value, find, vbNullString, 1&, -1&, compare))) \ LenB(find)
End Function
1 голос
/ 11 декабря 2009

Как сказал Дейв, самым простым решением было бы иметь массив длиной 26 (для английского языка) и проходить по циклу через каждый символ в строке, увеличивая правильный элемент массива. Вы можете использовать значение ASCII каждого символа, чтобы определить, какая это буква, а затем преобразовать номер ASCII буквы в соответствующий порядковый номер:

'Dimension array to 26 elements
Dim LetterCount(0 to 25) As Long

'Temporary index number
Dim tmpIdx As Long

'Temporary character
Dim tmpChar as String

'String to check
Dim checkStr As String
checkStr = "How many of each letter is in me?"

'Change all letters to lower case (since the upper case
'of each letter has a different ASCII value than its
'lower case)
checkStr = LCase(checkStr)

'Loop through each character
For n = 1 to Len(checkStr)

  'Get current character
  tmpChar = Mid(checkStr, n, 1)

  'Is the character a letter?
  If (Asc(tmpChar) >= Asc("a")) And (Asc(tmpChar) <= Asc("z")) Then

    'Calcoolate index number from letter's ASCII number
    tmpIdx = Asc(tmpChar) - Asc("a")

    'Increase letter's count
    LetterCount(tmpIdx) = LetterCount(tmpIdx) + 1

  End If

Next n

'Now print results
For n = 0 to 25
  Print Chr(Asc("a") + n) & " - " & CStr(LetterCount(n))
Next n
0 голосов
/ 08 декабря 2009
from itertools import groupby
sentence = raw_input("Your sentence:")
for char,group in groupby(sorted(sentence.lower())):
    print(char+": "+`len(list(group))`)
0 голосов
/ 08 декабря 2009
Imports System.Linq
Dim CharCounts = From c In "The quick brown fox jumped over the lazy dog." _
                 Group c By c Into Count() _
                 Select c, Count
0 голосов
/ 08 декабря 2009

Я бы посчитал и удалил каждый экземпляр первого символа и повторял до тех пор, пока не осталось символов. Затем отобразите счетчик для каждого обнаруженного символа. Намного лучше, чем проходить один раз для каждого возможного символа, если только вы не знаете, что возможный диапазон символов меньше длины предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...