2009-12-07 4 views
0

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

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

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

ответ

1

Как сказал Дэйв, самое простое решение было бы иметь массив длиной 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 
4

Loop в символы и добавить к списку

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 

Havent работал с LINQ, что чепчик, но я думаю, вы можете попробовать

Dim s As String = "tafata" 
Dim t = From c In s _ 
Group c By c Into Group _ 
Select Group 
+0

Haven У меня было время попробовать, но спасибо за код. – Dylan

+0

Вопрос помечен vb, этот код - C#. – ephemient

0

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

0
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

'jumped' ->' jumps' иначе 's' не тестируется :-) – wqw

0
from itertools import groupby 
sentence = raw_input("Your sentence:") 
for char,group in groupby(sorted(sentence.lower())): 
    print(char+": "+`len(list(group))`) 
1

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

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 
Смежные вопросы