2010-11-04 6 views
0

Очевидно, что я новичок в этом, следовательно, содержание этого проекта. Я написал код, который переведет английский на Pig Latin. Достаточно легко. Проблема в том, что я хочу найти способ перевести Pig Latin на английский язык с помощью логического блока. Строка клона просто выглядит как дешевый способ сделать это. Какие-либо предложения? Вот мой код:C# переводчик с Pig Latin на английский

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace FunctionTest 
{ 
    public class PigLatinClass 
    { 

     public static void pigTalk(string sentence) 
     { 
      try 
      { 
       while (sentence != "exit") 
       { 
        string firstLetter; 
        string afterFirst; 
        string pigLatinOut = ""; 
        int x; 
        string vowel = "AEIOUaeiou"; 

        Console.WriteLine("Enter a sentence to convert into PigLatin"); 

        sentence = Console.ReadLine(); 

        string[] pieces = sentence.Split(); 

        foreach (string piece in pieces) 
        { 
         afterFirst = piece.Substring(1); 
         firstLetter = piece.Substring(0, 1); 
         x = vowel.IndexOf(firstLetter); 

         if (x == -1) 
         { 
          pigLatinOut = (afterFirst + firstLetter + "ay "); 
         } 
         else 
         { 
          pigLatinOut = (firstLetter + afterFirst + "way "); 
         } 

         Console.Write(pigLatinOut); 
        } 

        Console.WriteLine("Press Enter to flip the sentence back."); 
        Console.ReadKey(true); 
        string clonedString = null; 
        clonedString = (String)sentence.Clone(); 
        Console.WriteLine(clonedString); 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.ToString()); 
      } 

     } 
    } 
} 

Проблема в том, что нет реального правила, которое бы сработало. Например: если 3-я буква из последней была «w», вы можете сказать, что это слово гласного, но согласное слово, начинающееся с «w», также может соответствовать этому правилу. Если первая буква снова была гласной, вы можете сказать, что это слово гласного, но согласное слово также может соответствовать этому правилу, поскольку первая буква перемещается на спину (pat = atpay). Единственный способ, по-моему, в том, что это возможно, - это иметь оператор if, который проверяет, находится ли w в третьей позиции, и слово начинается с гласного, который будет вызывать для оператора & & и Visual Studio кричит на вас, если вы используете его со строками.

ответ

4

Проблема заключается в том, что Pig Latin/английский перевод не биективная функция.

Например, представьте, что у вас есть 2 английских слова, таких как "all" и "wall", соответствующие латинские слова Pig будут всегда "allway".

Это предлагает вам, что если вы получите слово наподобие "allway", вы не можете дать уникальный перевод на английском языке, но (как минимум) два.

+0

именно то, что думает я. так что в этом конкретном случае я действительно ничего не теряю. Я попал в невозможность? –

+0

Да, я думаю, что у вас есть уникальный перевод (в большинстве случаев) невозможно. Но, возможно, вы могли бы дать разные переводы в случае нескольких возможностей ... – digEmAll

+0

ничего себе, что предпринять, что потребует много мозгового штурма, чтобы найти все несколько случаев ... или я мог бы создать функцию, которая будет обрабатывать это для меня. ОК. Думаю, я сейчас на правильном пути. Спасибо digEmAll и всем остальным, которые помогли мне! –

1

Я предполагаю, что это домашнее задание.

Возможно, ваш профессор хочет, чтобы вы перевели предложение в латинский свиньи и из свиного латина. Сохранение копии исходной строки позволяет вам «откидываться назад» от предложений, которые вы уже знаете в версии, отличной от свиньи. Это не позволяет вам откидываться от любой строки.

Я думаю, что вы хотите, чтобы структурировать свою программу, как это:

public class PigLatinClass 
{ 
    public static string ToPigLatin(string sentence) 
    { 
     // Convert a string to pig latin 
    } 

    public static string FromPigLatin(string sentence) 
    { 
     // Convert a string from pig latin (opposite logic of above) 
    } 

    public static string PigTalk() 
    { 
     string sentence; 

     Console.WriteLine("Enter a sentence to convert into PigLatin"); 
     sentence = Console.ReadLine(); 
     sentence = ToPigLatin(sentence); 
     Console.WriteLine(sentence); 

     Console.WriteLine("Press Enter to flip the sentence back."); 
     Console.ReadKey(true); 
     sentence = FromPigLatin(sentence); 
     Console.WriteLine(sentence); 
    } 
} 
+1

Нет, не домашнее задание просто пытается вернуться к кодированию, и это похоже на хорошо документированный проект. Спасибо за помощь! Да, построение нового класса для предикции логики будет работать отлично. Проблема заключается в логике. Я медленно думаю, что это невозможно. Как вы думаете? –

+0

Для приложения-переводчика возвращение копии исходной строки кажется обманом ... –