0

txtbox1から入力を受け取り、結果を出力する次の関数がありますtxtbox2。要点は、各文字を特定の数値に置き換え、各単語の値を計算してから、すべての単語の合計を表示することです。現在、この関数は常に 13 まで計算していaaa bbb ccます。たとえば、入力すると、結果は次のようになります。それを行うために関数を変更するにはどうすればよいですか?

aaa = 3
bbb = 15
cc = 14
Total = 32

Private Sub CountLetters(Input As String)

    Dim total As Integer = 0
    Dim dicLetters As New Dictionary(Of Char, Integer)
    dicLetters.Add("a", 1)
    dicLetters.Add("b", 5)
    dicLetters.Add("c", 7)

    For Each word As String In Input.Split

        Dim wordtotal As Integer = 0
        For Each cc As KeyValuePair(Of Char, Integer) In dicLetters

            wordtotal += cc.Value
        Next

        total += wordtotal

        'Display word totals here

        txtBox2.Text += word.PadRight(12) + "=" + _
                        wordtotal.ToString.PadLeft(5) + vbNewLine
    Next

    'Display total here
    txtBox2.Text += "Total".PadRight(12) + "=" + total.ToString.PadLeft(5)
End Sub
4

2 に答える 2

4

logixologist が示したように、問題は単語の値ではなく、辞書をループしてキーの値を合計することです。

各文字に値がある場合は、Dictionary を使用することをお勧めします (文字数が少ない場合は、a でもSelect構いません)。

以下は、探している結果を取得するコードです。

Dim total As Integer = 0
Dim wordTotal AS Integer
Dim dicLetters As New Dictionary(Of Char, Integer)
dicLetters.Add("a", 1)
dicLetters.Add("b", 5)
dicLetters.Add("c", 7)

' charValue will be used to hold the result of the TryGetValue below
Dim charValue As Integer

For Each word As String In Input.Split(New Char() { " " })

    wordTotal = 0

    ' Loop through the word
    For Each character As Char in word

        wordTotal += If(dicLetters.TryGetValue(character, charValue) = _
                     True, dicLetters(character), 0)
    Next

    total += wordTotal

    txtBox2.Text += word.PadRight(12) + " = " + _
                    wordTotal.ToString().PadLeft(5) + vbNewLine
Next

txtBox2.Text += "Total:".PadRight(12) + " = " + _
                total.ToString().PadLeft(5)

外側のループは基本的に同じです - 入力文字列を " " (スペース) で分割します。

wordTotal カウンターを 0 にリセットし、現在の単語をループ処理します (For Each Character を使用して一度に 1 文字ずつ単語を処理します)。

次の行はTryGetValueディクショナリで使用し、キーに値があれば値を に追加しwordTotal、そうでなければ 0 を追加します。

「aaa bbb cc」の出力は次のようになります。

aaa = 3
bbb = 15
cc = 14
合計: = 32
于 2013-07-02T03:43:40.693 に答える
1

ここにヒントがあります: このステートメントで何をしているのか:

For Each cc As KeyValuePair(Of Char, Integer) In dicLetters
wordtotal += cc.Value
Next

ディクショナリ内のすべてのキーと値のペアについて、それらを合計します...つまり、1、5、および 7 を合計すると 13 になります。

各文字の値を辞書に照らしてチェックし、それを追加するSELECT/CASEステートメントを入れてみませんかwordtotal

于 2013-07-01T23:23:32.087 に答える