18

Visual Basic試験の準備のために、過去の試験問題の作成に忙しくしています。私は私が立ち往生している次の質問で助けが必要です。

文字「e」、「f」、「g」が文字列に出現する回数を計算する関数プロシージャを記述します

疑似コードを書いてみたところ、次のようになりました。

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)ループする方法と、特定の文字が文字列に表示される回数をカウントする方法を教えてください。

4

3 に答える 3

20

答えは、コースで既に学んだことと、使用する機能によって大きく異なります。

しかし、一般に、文字列内の文字をループするのは次のように簡単です。

Dim s As String = "test"

For Each c As Char in s
    ' Count c
Next

カウントに関しては、文字ごとに個別のカウンター変数 (eCount As Integerなど) を用意し、cその文字に等しいときにそれらをインクリメントするだけです。カウントする文字数を増やすと、明らかにそのアプローチはうまくスケーリングしません。これは、関連する文字の辞書を維持することで解決できますが、これはあなたの演習には高度すぎると思います。

于 2012-11-06T12:47:35.170 に答える
2

文字列のループは単純です。文字列は、ループ可能な文字のリストとして扱うことができます。

Dim TestString = "ABCDEFGH"
for i = 0 to TestString.length-1
debug.print(teststring(i))
next

for..eachループの方がさらに簡単ですが、foriループの方が優れている場合もあります。

数を数えるために私はこのような辞書を使うでしょう:

        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
于 2012-11-06T12:50:27.433 に答える
0

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)
于 2012-11-06T12:57:39.413 に答える