2010-08-25 2 views
0

Прошлой ночью я возился с Пиглатином с использованием массивов и выяснил, что я не мог изменить процесс. Как бы я сдвинул фразу и вытащил символы «a» и «y» Char в конце слова и вернул исходное слово во фразе.Piglatin с использованием массивов

Например, если я вошел в «piggy», это получилось бы как «iggypay», переместившее слово piggy, так что «p» находится в конце слова, и «ay» добавляется.

Вот пример кода, чтобы вы могли попробовать его.

public string ay; 
    public string PigLatin(string phrase) 
    { 
     string[] pLatin; 
     ArrayList pLatinPhrase = new ArrayList(); 
     int wordLength; 
     pLatin = phrase.Split(); 

     foreach (string pl in pLatin) 
     { 
      wordLength = pl.Length; 
      pLatinPhrase.Add(pl.Substring(1, wordLength - 1) + pl.Substring(0, 1) + "ay"); 
     } 

     foreach (string p in pLatinPhrase) 
     { 
      ay += p; 
     } 
     return ay; 
    } 

Вы заметите, что пример не запрограммировано, чтобы найти гласные и добавить их в конец вместе с «ау». Просто простой способ сделать это.

Если вам где интересно, как реверс выше попробовать этот пример uPiglatinify

public string way; 
    public string uPigLatinify(string word) 
    { 
     string[] latin; 
     int wordLength; 
     // Using arrraylist to store split words. 
     ArrayList Phrase = new ArrayList(); 
     // Split string phrase into words. 
     latin = word.Split(' '); 

     foreach (string i in latin) 
     { 
      wordLength = i.Length; 
      if (wordLength > 0) 
      { 
       // Grab 3rd letter from the end of word and append to front 
       // of word chopping off "ay" as it was not included in the indexing. 
       Phrase.Add(i.Substring(wordLength - 3, 1) + i.Substring(0, wordLength - 3) + " "); 
      } 
     } 

     foreach (string _word in Phrase) 
     { 
      // Add words to string and return. 
      way += _word; 
     } 
     return way; 
    } 
+0

① Вы понимаете, что ваш алгоритм, когда он стоит неправильно, переводит «яблоко» на «ppleaay» и «большой палец» на «humbtay»? ② Вы понимаете, что эта функция работает правильно только один раз? Вызов 'PigLatin (« ring »)', за которым следует 'PigLatin '(« мышь »)' выводит '' ingray '' для первого (это правильно), но затем '' ingrayousemay'' для второго. – Timwi

+0

Нет, это правильный выход. "ring mouse cow pig donkey" все перевести на "ingray ousemay owcay igpay onkeyday". Вы просто пропустите детали. Если это неправильно, это потому, что вы неправильно его переписали. Кажется, что человеческая ошибка лучшая ваша черта. – Nightforce2

+0

@Ardman, строка ввода «Фраза» хранится в строке [] latin. Что вы получаете в? – Nightforce2

ответ

0

Работа разделить фразу на слова и рекомбинировать слова после преобразования их так же, как в оригинальном футляре. Трудность заключается в том, что отдельные слова не имеют свинья-латинского языка. С некоторой проверки ошибок, я полагаю, вы могли бы сделать это:

string UnPigLatinify(string word) 
{ 
    if ((word == null) || !Regex.IsMatch(word, @"^\w+ay$", RegexOptions.IgnoreCase)) 
     return word; 

    return word[word.Length - 3] + word.Substring(0, word.Length - 3); 
} 

Регулярное выражение просто проверяет, чтобы убедиться, что слово длиной не менее 3 букв, состоящих из символов, и заканчивается «ау».

Фактическое преобразование принимает третью и последнюю букву (первоначальную первую букву) и добавляет остальную часть слова минус «ay» и оригинальная буква.

Это вы имели в виду?

+0

Это то, что я ищу! Интересный подход я могу добавить. Я использовал string.Remove и пытаюсь использовать его так: Remove (pl.Substring (1, wordLength -1) + pl.Substring (0,1) .TrimEnd (Convert.ToChar ("a", "y"))); Результат наложил «ay», но вместо этого он оставил «gi». Думаю, я редактировал неправильную часть. Было уже поздно, и я тоже устал. Я должен буду помнить об этом, и это было так просто! Еще раз спасибо за объяснение. – Nightforce2

+1

@ Nightforce2: Не желая звучать неуважительно, но вы уверены, что полностью понимаете код Криса Шмиха? Вы понимаете, что эта функция только преобразует одно слово, в то время как ваша оригинальная попытка конвертировать целое предложение? Вы знаете, что такое регулярное выражение, и вы использовали его раньше? И вы полностью понимаете, почему ваша собственная попытка не удалась? Честно говоря, я не пытаюсь забрать вас здесь, я пытаюсь дать несколько советов: вы не должны копировать код других людей, не понимая этого. – Timwi

2

Пожалуйста, не принимайте это неправильно, но хотя вы, вероятно, можете заставить людей здесь дать вам код C# для реализации алгоритма, который вы хотите, я подозреваю, что этого недостаточно, если вы хотите узнать, как это работает. Чтобы узнать основы программирования, есть несколько хороших обучающих программ, которые нужно изучить (будь то веб-сайты или книги). В частности, если вы стремитесь быть программистом, вам нужно будет узнать не только о том, как писать код. В вашем примере:

  • Вы должны сначала написать спецификацию о том, что ваша функция PigLatin должна делать. Подумайте обо всех углах: что, если первая буква - гласная? Что, если в начале есть несколько согласных? Что делать, если есть только согласные? Что делать, если ввод начинается с числа, скобки или пробела? Что делать, если входная строка пуста? Запишите точно, что должно произойти во всех этих случаях - даже если это «исключение».

  • Только тогда вы можете реализовать алгоритм в соответствии со спецификацией (т. Е. Написать фактический код C#). При этом вы можете обнаружить, что спецификация неполна, и в этом случае вам нужно вернуться и исправить ее.

  • Как только ваш код будет завершен, вам необходимо выполнить test it. Запустите его на нескольких тестовых корпусах, особенно угловые шкафы, которые вы придумали выше: например, попробуйте PigLatin("air"), PigLatin("x"), PigLatin("1"), PigLatin("") и т. Д.В каждом случае сначала убедитесь, какое поведение вы ожидаете, а затем посмотрите, соответствует ли поведение вашему ожиданию. Если это не так, вам нужно вернуться и исправить код.

После того, как вы реализовали алгоритм вперед PigLatin и работает (читай: проходит все testcases), то вы уже навыки, необходимые для записи обратной функции самостоятельно, вы. I гарантия вы, что вы будете чувствовать себя достигнутым и возбужденным тогда! Принимая во внимание, что, если вы просто скопируете код с этого сайта, вы настроитесь на то, что чувствуете себя глупым, потому что считаете, что другие люди могут это сделать, а вы не можете.

Конечно, мы, тем не менее рады помочь Вам с конкретными техническими вопросами, например, «В чем разница между ArrayList и List<string>?» Или «Что область локальной переменной значит?» (Но поиск сначала - это, возможно, уже было задано раньше), но вы, вероятно, не должны просить, чтобы код был полностью написан и закончен для вас.

+0

Хороший совет, я обычно комментирую свой код и организую его довольно хорошо. В этом случае это была быстрая запись. Собственно, в этом случае я многому научился. Я узнал больше, когда люди показали мне, как делать что-то, а затем пытаются читать книгу и «пытаться» интерпретировать. Это более быстрый подход и авторитет, не говорящий о том, что я не делаю ничего для себя, поскольку я сделал довольно большой проект до сих пор. Я потратил 2 часа, пытаясь найти множество разных подходов, чтобы заставить это работать правильно, но не получило работу так, как должно было работать. Я не нашел много ссылок с помощью Google. – Nightforce2

+0

@ Nightforce2: Еще раз, пожалуйста, не принимайте это неправильно - но, к сожалению, многие люди попадают в ловушку, думая, что только потому, что они что-то написали (даже «довольно большой проект»), что он автоматически успех. Из кода, который вы опубликовали в вопросе, и ваше высказывание о том, что вы потратили 2 часа на эту простую проблему, откровенно впечатление, которое он оставляет, заключается в том, что у вас, вероятно, нет навыков для ведения большого проекта. Конечно, я не говорю, что вы не можете приобрести эти навыки - но сначала вам нужно подтвердить себе, какие именно навыки вам не хватает. – Timwi

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