刚把这个猪拉丁问题当作“作业”。我得到的条件是:


对于以辅音开头的单词,初始元音之前的所有字母都位于单词序列的末尾。然后,添加ay
对于以元音开头的单词,将初始元音以及第一个辅音或辅音簇移动到单词的末尾并添加ay
对于没有辅音的单词,请添加way


经过测试:


  编写将英语句子转换为Pig Latin的方法


那变成了


  itewray离开ethodmay atthay高速公路onvertcay anay ishenglay entencesay ointay igpay atinlay


它做了它应该做的事,只有一个例外,它不在规则中,但是我考虑过,我不知道如何实现。我创建的方法完全可以解决问题,但如果我尝试将所有辅音词转换为Piglatin,将无法正常工作。例如,将grrrrr转换为Piglatin应该是grrrrray



public static string ToPigLatin(string sentencetext)
    {
        string vowels = "AEIOUaeiou";
        //string cons = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";
        List<string> newWords = new List<string>();

        foreach (string word in sentencetext.Split(' '))
        {
            if (word.Length == 1)
            {
                newWords.Add(word + "way");
            }

            if (word.Length == 2 && vowels.Contains(word[0]))
            {
                newWords.Add(word + "ay");
            }

            if (word.Length == 2 && vowels.Contains(word[1]) && !vowels.Contains(word[0]))
            {
                newWords.Add(word.Substring(1) + word.Substring(0, 1) + "ay");
            }

            if (word.Length == 2 && !vowels.Contains(word[1]) && !vowels.Contains(word[0]))
            {
                newWords.Add(word + "ay");
            }

            for (int i = 1; i < word.Length; i++)
            {
                if (vowels.Contains(word[i]) && (vowels.Contains(word[0])))
                {
                    newWords.Add(word.Substring(i) + word.Substring(0, i) + "ay");
                    break;
                }
            }

            for (int i = 0; i < word.Length; i++)
            {
                if (vowels.Contains(word[i]) && !(vowels.Contains(word[0])) && word.Length > 2)
                {
                    newWords.Add(word.Substring(i) + word.Substring(0, i) + "ay");
                    break;
                }

            }
        }
            return string.Join(" ", newWords);

    }

    static void Main(string[] args)
    {
           //Console.WriteLine("Enter a sentence to convert to PigLatin:");
           // string sentencetext = Console.ReadLine();
            string pigLatin = ToPigLatin("Write a method that will convert an English sentence into Pig Latin");
            Console.WriteLine(pigLatin);

            Console.ReadKey();

    }

最佳答案

试试看:

public static string ToPigLatin(string sentencetext)
{
    string vowels = "AEIOUaeiou";
    string cons = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";

    Func<string, string> toPigLatin = word =>
    {
        word = word.ToLower();

        var result = word;

        Func<string, string, (string, string)> split = (w, l) =>
        {
            var prefix = new string(w.ToArray().TakeWhile(x => l.Contains(x)).ToArray());
            return (prefix, w.Substring(prefix.Length));
        };

        if (!word.Any(w => cons.Contains(w)))
        {
            result = word + "way";
        }
        else
        {
            var (s, e) = split(word, vowels);
            var (s2, e2) = split(e, cons);
            result = e2 + s + s2 + "ay";
        }
        return result;
    };

    return string.Join(" ", sentencetext.Split(' ').Select(x => toPigLatin(x)));
}


代码:

string pigLatin = ToPigLatin("Grrrr Write a method that will convert an English sentence into Pig Latin");
Console.WriteLine(pigLatin);


给出:


  grrrray itewray离开ethodmay atthay高速公路onvertcay anay ishenglay entencesay ointay igpay atinlay

关于c# - 英语到 pig 拉丁语C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48896966/

10-13 08:13