C # переводчик со свиньи с латыни на английский - PullRequest
0 голосов
/ 04 ноября 2010

Очевидно, я новичок в этом, отсюда и содержание этого проекта. Я написал код, который переведет английский на Pig Latin . Достаточно просто. Проблема в том, что я хочу найти способ перевести 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 в 3-й позиции, и слово начинается с гласной, которая будет вызывать оператор &&, и Visual Studio кричит на вас, если вы используете его со строками.

Ответы [ 2 ]

4 голосов
/ 04 ноября 2010

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

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

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

1 голос
/ 04 ноября 2010

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

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

Я думаю, вы хотите структурировать вашу программу следующим образом:

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);
    }
}
...