3

私は最近、私の先生が私にもそうするように頼んだ私の仕事の母音を識別するのが難しいことに気づきました、誰かがそれをする方法を持っていますか?...現在私のコードはそうです。

Dim mystring As String
Dim isitavowel As Boolean
Dim VOWELCOUNT As Integer

Sub Main()

    Console.WriteLine("Enter the text of your choice here")
    mystring = Console.ReadLine
    VOWELCOUNT = 0
    For i = 1 To mystring.Length

        isitavowel = False
        If mystring(i - 1) = "a" Or mystring(i - 1) = "A" Then isitavowel = True
        If mystring(i - 1) = "e" Or mystring(i - 1) = "E" Then isitavowel = True
        If mystring(i - 1) = "i" Or mystring(i - 1) = "I" Then isitavowel = True
        If mystring(i - 1) = "o" Or mystring(i - 1) = "O" Then isitavowel = True
        If mystring(i - 1) = "u" Or mystring(i - 1) = "U" Then isitavowel = True

        If isitavowel = True Then
            VOWELCOUNT = VOWELCOUNT + 1
        End If


    Next
    Console.WriteLine("That had " & VOWELCOUNT & " vowel's in it")
    Console.ReadLine()

問題は、エラーが発生する場合があることです。助けてください!

4

3 に答える 3

3

コードを最適化しました。これにより、迅速かつ適切な結果が得られるはずです。

Private vowels As String = "aeiou"

Sub Main()

    Console.WriteLine("Enter the text of your choice here")
    Dim mystring As String = Console.ReadLine.ToLower
    Dim VOWELCOUNT As Integer = 0

    For Each c As Char In mystring
        If vowels.Contains(c) Then VOWELCOUNT += 1
    Next

    Console.WriteLine("String contained {0} vowels in it", VOWELCOUNT)
    Console.ReadLine()

End Sub

あなたはコーディングにかなり慣れていないと述べているので、コードを見ていきます。

  • メインでは、識別したいすべての文字を含む文字列を定義します。
  • 次に、ルーチン内で ReadLine から直接初期化します。これは文字列を返すためです。
  • より少ない文字をチェックできるように、その文字列を小文字にします
  • 次に、for-each ループが文字列を 1 文字ずつ処理します。
  • 母音を含む文字列にその文字が含まれているかどうかを確認します。一致する場合は true を返します。
  • true の場合、THEN は母音を +1 カウントすることを許可します。ここでの短い形式は、あなたがしたように行うことと同じです. 速度に違いはありませんが、書きやすいだけです。注: 一般に、= true (または = false) をチェックする必要はありません。値を直接使用できます:If value ThenまたはIf Not value Then
  • 次に、文字列をフォーマットして結果を表示します。{0} は、カンマの後に指定した最初の引数を取ります ({1} は次の引数を取るなど)。
  • ルーチンでローカルに淡色表示して初期化することにより、変数 (この場合はカウンター) をリセットせずにルーチンを再利用できた可能性があります。
于 2012-10-13T08:24:30.557 に答える
2

私はあなたのコードを編集して改善しました。これは私の解決策であり、これで問題が発生することはありません。

  Module Module1
    Dim kMyString As String
    Dim kVowel As Boolean
    Dim kVowelNumber As Integer
    Dim kAnswer As Integer = 0
    Sub Main()
        Console.ForegroundColor = ConsoleColor.DarkGray
        Console.WriteLine("Enter your sentence below:")
        Console.ForegroundColor = ConsoleColor.DarkCyan
        kMyString = Console.ReadLine
        Console.ForegroundColor = ConsoleColor.DarkGray
        For k = 1 To kMyString.Length
            Console.Write(kMyString(k - 1))
            kVowel = False
            If kMyString(k - 1) = "a" Or kMyString = "A" Then kVowel = True
            If kMyString(k - 1) = "e" Or kMyString = "E" Then kVowel = True
            If kMyString(k - 1) = "i" Or kMyString = "I" Then kVowel = True
            If kMyString(k - 1) = "o" Or kMyString = "O" Then kVowel = True
            If kMyString(k - 1) = "u" Or kMyString = "U" Then kVowel = True

            If kVowel Then
                Console.WriteLine(" is a vowel")
                kAnswer = (kAnswer + 1)
            Else
                Console.WriteLine(" isn't a vowel")
            End If
        Next
        Console.ForegroundColor = ConsoleColor.DarkRed
        Console.WriteLine("There are " & kAnswer & " vowels!")
        Console.ReadLine()
    End Sub
End Module

お役に立てれば!

于 2012-10-13T08:07:09.917 に答える
0

これはいくつかの方法で実現できます

しかし、この宿題なので、最後の 2 つを読む必要があります。今のところ、私はあなたを助けるだけです。

 For k = 1 To kMyString.Length
    Dim xter = kMyString(k - 1).ToLower  'convert to lowercase
    kVowel = False

    If xter = "a" or xter = "e" or xter = "i" or xter = "o" or xter = "u" Then 
       kVowel = true
       VOWELCOUNT = VOWELCOUNT + 1
    End If
 Next

コードが短くなりました。または誰かが提案したように

For k = 1 To kMyString.Length
    Dim xter = kMyString(k - 1).ToLower  'convert to lowercase

    If InStr("aeiou", xter) > 0 Then  //"aeiou".Contains(xter)
       VOWELCOUNT += 1
    End If
Next

リンク

これは、計算を示すことになっている試験で電卓を使用しているように見えます。課題には向かないかもしれませんが、後で役に立ちます

Dim VOWELCOUNT As Integer = kMyString.Count(Function(v) "aeiou".Contains(v))
于 2012-10-13T08:09:09.390 に答える