2

ユーザーがテキストを入力するフォームにテキストボックスがあります。各文字には、a = 1、b = 2、c = 3 などのように異なる値が割り当てられます。たとえば、ユーザーが「aa bb ccc」と入力すると、ラベルの出力は次のようになります。

aa = 2
bb = 4
dd = 6
Total value is (12)

テキストボックスの文字列をループすることで合計値を取得できましたが、各単語の合計を表示するにはどうすればよいですか。これは私がこれまでに持っているものです:

For letter_counter = 1 To word_length
    letter = Mid(txtBox1.Text, letter_counter, 1)

    If letter.ToUpper = "A" Then
        letter_value = 1
    End If
    If letter.ToUpper = "B" Then
        letter_value = 2
    End If
    If letter.ToUpper = "C" Then
        letter_value = 3
    End If
    If letter.ToUpper = "D" Then
        letter_value = 4
    End If
    If letter.ToUpper = "E" Then
        letter_value = 5
    End If
    If letter.ToUpper = " " Then    
        letter_value = 0
    End If

    totalletter = totalletter + letter_value

    Label1.Text = Label1.Text & letter_value & " "
    txtBox2.Text = txtBox2.Text & letter_value & " "
Next letter_counter
4

5 に答える 5

2

これはあなたにアイデアを与えるはずです:

Dim listOfWordValues As New List(Of Integer)
For letter_counter = 1 To word_length
    letter = Mid(txtBox1.Text, letter_counter, 1)

    If letter = " " Then 
        totalletter= totalletter + letter_value   
        listOfWordValues.Add(letter_value)
        letter_value  = 0
     Else
        letter_value += Asc(letter.ToUpper) - 64
     End If
Next letter_counter

totalletter = totalletter + letter_value
If Not txtBox1.Text.EndsWith(" ") Then listOfWordValues.Add(letter_value)
txtBox2.Text = txtBox2.Text & string.Join(", ", listOFWordValues);
于 2013-06-30T07:51:56.360 に答える
0

各文字を数字にマップする辞書を使用して、この問題を解決します。

Private Shared ReadOnly LetterValues As Dictionary(Of Char, Integer) = GetValues()

Private Shared Function GetValues() As IEnumerable(Of KeyValuePair(Of Char, Integer))
    Dim values As New Dictionary(Of Char, Integer)
    Dim value As Integer = 0
    For Each letter As Char In "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        value += 1
        values.Add(letter, value)
    Next
    Return values
End Function

Public Function CalculateValue(input As String) As Integer
    Dim sum As Integer = 0
    For Each letter As Char In input.ToUpperInvariant()
        If LetterValues.ContainsKey(letter) Then
            sum += LetterValues.Item(letter)
        End If
    Next
    Return sum
End Function

使用例:

    Dim sum As Integer = 0
    For Each segment As String In "aa bb ccc".Split()
        Dim value = CalculateValue(segment)
        Console.WriteLine("{0} = {1}", segment, value)
        sum += value
    Next
    Console.WriteLine("Total value is {0}", sum)

    ' Output
    ' aa = 2
    ' bb = 4
    ' ccc = 9
    ' Total value is 15
于 2013-06-30T11:20:56.433 に答える