Visual Basic?

I need some Visual Basic.Net help. Im using an older edition, and I didn’t see anything in the programming, so I put it here…feel free to move it. I have code for the project (Pig Latin Translator) I am working on if anyone thinks they might be able to fix/help it. Thanks.

/code/ ’ Uses select case to determine vowels and consonants, and to translate text to
’ pig latin.

    Dim strInput As String = ""
    Dim str1stCharacter As String = ""
    Dim strOutput As String = ""
    Dim intStringLength As Integer = 0
    strInput = txtInput.Text
    str1stCharacter = Microsoft.VisualBasic.Left(strInput, 1)
    Select Case str1stCharacter.ToUpper()
        Case "A", "E", "I", "O", "U"
            strOutput = strInput & "WAY"
        Case Else
            intStringLength = Len(strInput)
            strOutput = Microsoft.VisualBasic.Right(strInput, 3) & Microsoft.VisualBasic.Left(strInput, 2) & "AY"
    End Select
    MessageBox.Show("The Pig Latin Translation is: " & strOutput)
    Exit Sub

/code/

We can probably help you, but it helps to know what’s wrong with it/what it’s not doing that it should/what’s it’s doing that it shouldn’t.

–Ryan

Here is the corrected code implemented in a console application.

Look at the comments for corrections.


Imports System.Text

Module Module1
    Sub Main()
        Do
            Dim input As String = Console.ReadLine
            If String.IsNullOrEmpty(input) Then
                Exit Sub
            End If
            Dim strOutput As String = GetPigLatin(input)
            Console.WriteLine(String.Format("The Pig Latin Translation is: {0}", strOutput))
        Loop
    End Sub

    Private Function GetPigLatin(ByVal input As String) As String
        Dim words As String() = input.Split(" ")
        Dim output As New StringBuilder() 'StringBuilder is much faster than regular string concatenation. 

        For Each word In words
            output.Append(GetPigLatinWord(word))
            output.Append(" ")
        Next
        Return output.ToString() 'Get the final string from the StringBuilder
    End Function

    Private Function GetPigLatinWord(ByVal strInput As String) As String
        Dim str1stCharacter As String = ""
        Dim strOutput As String = ""
        Dim intStringLength As Integer = 0
        str1stCharacter = Microsoft.VisualBasic.Left(strInput, 1)
        Select Case str1stCharacter.ToUpper()
            Case "A", "E", "I", "O", "U"
                strOutput = strInput & "WAY"
            Case Else
                'THIS IS WHAT I CHANGED. You were using fixed lengths to capture from each end of the word. 
                'That meant that only 5 char words would work with your implementation.
                strOutput = strInput.Substring(1) & strInput.Substring(0, 1) & "AY"
        End Select
        Return strOutput.ToLower 'makes output prettier
    End Function
End Module

Oops. Its supposed to turn english text into pig latin, and then i have to calculate the number of words, the number of words starting with vowels, and percent of words that start with vowels,but i cant really get much to work. Like, if i type in “dog” i get “dog doay” instead of “ogday”. but if i type in “aardvark” its correct and says “aardvarkway”. Sorry for the confusion. And thank you EHaskins for the corrections. Ill have to check and fix mine tomorrow.