2016-01-11 4 views
1

Ubbi Dubbi - это программа, в которой перед первым гласным слова вставлены буквы «ub». В моем коде он не делает этого до первого гласного, он делает вторую гласную. Если я поставлю «привет», вывод будет «hellubo», когда это должно быть «hubello». Извините, если мой английский плохой, я все еще учился.Ubbi Dubbi C# код программы

Console.Write("Enter word: "); 
     string word = Console.ReadLine(); 
     var loc = word.IndexOfAny(new char[] {'a', 'e', 'i', 'o', 'u'}); 
     int aloc = word.IndexOf('a'); 
     int eloc = word.IndexOf('e'); 
     int iloc = word.IndexOf('i'); 
     int oloc = word.IndexOf('o'); 
     int uloc = word.IndexOf('u'); 
     if (aloc!= -1 && aloc > loc) 
     { 
      loc = aloc; 
     } 
     if (eloc!= -1 && eloc > loc) 
     { 
     loc = eloc; 
     } 
    if (iloc!= -1 && iloc > loc) 
     { 
      loc = iloc; 
     } 
    if (oloc!= -1 && oloc > loc) 
     { 
      loc = oloc; 
     } 
    if (uloc!= -1 && uloc > loc) 
     { 
     loc = uloc; 
     } 
    string word1 = word.Insert(loc, "ub"); 
    Console.WriteLine(word1); 
+1

Согласно Википедии, "привет" должен стать "hubellubo": https://en.wikipedia.org/ wiki/Ubbi_dubbi ... Вы говорите на другом диалекте Ubbi Dubbi? :) –

+0

@PaoloTedesco different – user5772068

ответ

3

После звонка IndexOfAny все работы сделано. Таким образом, вы можете пропустить большую часть своего кода. Но вы должны вставить чек, если есть какие-либо гласные вообще:

Console.Write("Enter word: "); 
string word = Console.ReadLine(); 
var loc = word.IndexOfAny(new char[] { 'a', 'e', 'i', 'o', 'u' }); 

string word1 = loc >= 0 ? word.Insert(loc, "ub") : word; 
Console.WriteLine(word1); 

В коде «е» найдено, так loc = eloc выполняется. Но есть также «o», и loc = oloc выполняется ПОСЛЕ «e'-check». Таким образом, окончательное значение loc состоит в том, что один из oloc.

+0

Я не уверен, что я читаю это право, можете ли вы объяснить эту часть лучше? – user5772068

+0

Сначала вы проверяете 'eloc! = -1'. Это верно, поскольку eloc равен 1 ('e' в позиции 1 в 'Hello') и поэтому 'loc = eloc'. После этого вы делаете чек на 'oloc'. 'oloc' равен 4, который не равен -1 и больше 1 (' oloc> loc'), поэтому в конце 'loc = 4'. Если вы проверите «oloc Fratyx

+0

Но, как я сказал в своем посте, после строки IndexOfAny все остальные проверки не нужны. – Fratyx

2

Вы можете легко достичь этого при помощи API.

private static string processWord(string word) 
    { 
     // Vowels array 
     char[] vowels = new char[] { 'a', 'e', 'i', 'o', 'u' }; 

     //Find the index of your first vowel in your 'word' 
     int index = word.IndexOfAny(vowels); 

     //Insert 'ub' at above location 
     word = word.Insert(index, "ub"); 

     //Return the word 
     return word; 
    } 

или

private static string processWord(string word) 
    { 
     return word.Insert(word.IndexOfAny(new char[] { 'a', 'e', 'i', 'o', 'u' }), "ub"); 
    } 

Выберите любой метод, в зависимости от того легко для вас, чтобы понять

Смежные вопросы