2013-06-22 3 views
-3

Я дал ему несколько попыток, и хотя я могу создать код, который позволит мне заставить его работать с такими словами, как «найти» или «еще», я не могу это сделать работайте для слов, начинающихся с двух или более согласных. Моим конкретным вопросом было бы то, как я могу заставить программу искать один из i, o, u или e? поэтому я могу запросить позицию первого экземпляра их использования, используя IndexOf + Substring для завершения вопроса.Поиск гласного в строке

мой код до сих пор: -

Private Sub btnCompute_Click(sender As System.Object, e As System.EventArgs) Handles btnCompute.Click 
    Dim word As String = CStr(txtInput.Text) 
    Dim first_letter As String = word.Substring(0, 1) 

    Const vovel As String = "aeiouy" 
    Const constants As String = "bcdfjklmnopqrstvwxz" 

    Dim find As String = word.Substring(0, vovel) 
    Dim delete As String = word.Substring(vovel, constants) 


    If vovel.Contains(first_letter) Then 
     txtResults.Text = txtInput.Text & "way" 
    ElseIf constants.Contains(first_letter) Then 
     txtResults.Text = delete & find & "ay" 



    End If 
End Sub 

End Class

Любая помощь или совет будет очень ценна

+4

Знаете ли вы, что 'letter' не объявляется и что' first_letter' никогда не используется? –

+1

После того как вы скорректировали свой код, вы можете найти это полезным: 'If" aeiou ".Contains (letter.ToLower()) Then' –

+0

Я просто попробовал еще раз и разместил свой новый код, –

ответ

2

Вы можете использовать регулярные выражения, такие как [aeiou]. Затем используйте свойство Index, чтобы получить его после согласования

1

Если я понимаю вопрос, вы можете использовать; например

char[] vowels = new char[] { 'a', 'e', 'i', 'o', 'u' }; 
    string word = "test"; 

    var index = word.IndexOfAny(vowels); 
+0

Но чувствителен к регистру, а также C# вместо VB.NET. –

+0

Если это необходимо для чувствительности к регистру: 'char [] vowels = new char [] {'a', 'A', 'e', ​​'E', 'i', 'I', 'o', ' 'O', 'u', 'U'}; ' –

0

За то, что вы пытаетесь сделать, вот один из способов:

Private Function IgpayAtinlay(word As String) As String 
    Dim vowels As String = "aeiou" 
    Dim Upper As Boolean = False 
    If Char.IsUpper(word(0)) Then Upper = True 
    For I = 0 To word.Length - 1 
     If vowels.Contains(word(I)) Then 
      If I = 0 Then 
       'If the vowel is the first letter add "way" to the end 
       word = word + "way" 
       Exit For 
      Else 
       'Otherwise we take the rest of the word starting at the vowel, 
       'put the beginning letters on the end and add "ay" 
       word = word.ToLower 
       word = word.Substring(I) + word.Substring(0, I) + "ay" 
       'If the first letter was upper case then make the new first letter 
       'the same 
       If Upper Then word = word(0).ToString.ToUpper + word.Substring(1) 
       Exit For 
      End If 
     End If 
    Next 
    Return word 
End Function 

Private Sub btnCompute_Click(sender As System.Object, e As System.EventArgs) Handles btnCompute.Click 
    txtResults.Text = IgpayAtinlay(txtInput.Text) 
End Sub 

Я включил код, чтобы сохранить корпус первой буквы

TODO:

использования список слов для проверки ввода, чтобы убедиться, что это действительное слово.