0

显然我是新手,因此是这个项目的内容。我已经编写了一些代码,可以将英语翻译成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());
            }

        }
    }
}

问题是没有真正可行的规则。例如:如果倒数第三个字母是“w”,您可能想说这是一个元音词,但以“w”开头的辅音词也符合此规则。如果第一个字母又是一个元音,你可能想说这是一个元音词,但是辅音词也可以符合这个规则,因为第一个字母被移到后面(pat = atpay)。我认为这是可能的唯一方法是有一个 if 语句来检查 w 是否在第三个位置,并且单词以元音开头,这将调用 && 运算符,如果你将它与字符串一起使用,Visual Studio 会对你大喊大叫。

4

2 回答 2

4

问题是 Pig 拉丁语/英语翻译不是双射函数。

例如,假设有 2 个英语单词"all""wall",对应的猪拉丁语单词将始终是"allway"

这建议你,如果你得到一个词,"allway"你不能用英语给出一个独特的翻译,但(至少)两个。

于 2010-11-04T15:40:59.597 回答
1

我假设这是家庭作业。

您的教授可能想要您将句子转换为 pig latin 和 pig latin。保留原始字符串的副本只会让您从已经知道非猪拉丁语版本的句子中“翻转”。它不允许您从任何字符串翻转回来。

我认为您想像这样构建您的程序:

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);
    }
}
于 2010-11-04T15:30:17.527 回答