Цитирование через символы в строке в VB.NET
Я работаю над прошлыми экзаменационными работами в рамках подготовки к экзамену Visual Basic. Мне нужна помощь в следующем вопросе, который я застрял.
Напишите функцию для вычисления количества раз, когда символы "e", "f" и "g" появляются в строке
Я попытался написать код psuedo и придумал следующее.
Loop through each individual character in the string
If the character = "e","f" or "g" add 1 to number of characters
Exit loop
Display total in messagebox
Как мне перебирать отдельные символы в строке (используя цикл for
) и как подсчитывать количество раз, когда в строке появляется конкретный символ?
Ответы
Ответ 1
Ответ в значительной степени зависит от того, что вы уже узнали в своей курсовой работе и о том, какие функции вы должны использовать.
Но, в общем, цикл над символами в строке так же просто:
Dim s As String = "test"
For Each c As Char in s
' Count c
Next
Что касается подсчета, просто разделите счетные переменные (eCount As Integer
и т.д.) для каждого символа и увеличивайте их, если c
равен этому символу - очевидно, что этот подход не масштабируется хорошо, как только вы увеличиваете количество символов для подсчета. Это можно решить, поддерживая словарь соответствующих символов, но я предполагаю, что это слишком продвинуто для вашего упражнения.
Ответ 2
Цитирование через строку прост: строка может рассматриваться как список символов, которые могут быть закодированы.
Dim TestString = "ABCDEFGH"
for i = 0 to TestString.length-1
debug.print(teststring(i))
next
еще проще будет цикл for..each, но иногда лучше для я цикла
Для подсчета чисел я бы использовал словарь
Вот так:
Dim dict As New Dictionary(Of Char, Integer)
dict.Add("e"c, 0)
Beware: a dictionary can only hold ONE item of the key - that means, adding another "e" would cause an error.
each time you encounter the char you want, call something like this:
dict.Item("e"c) += 1
Ответ 3
Если вам разрешено использовать (или вы хотите изучить) Linq, вы можете использовать Enumerable.GroupBy
.
Предполагая, что ваш вопрос - это текст, который вы хотите найти:
Dim text = "H*ow do i loop through individual characters in a string (using a for loop) and how do I count the number of times a specific character appears in a string?*"
Dim charGroups = From chr In text Group By chr Into Group
Dim eCount As Int32 = charGroups.Where(Function(g) g.chr = "e"c).Sum(Function(g) g.Group.Count)
Dim fCount As Int32 = charGroups.Where(Function(g) g.chr = "f"c).Sum(Function(g) g.Group.Count)
Dim gCount As Int32 = charGroups.Where(Function(g) g.chr = "g"c).Sum(Function(g) g.Group.Count)