【问题标题】:English to PigLatin c#英语到 PigLatin c#
【发布时间】:2018-02-21 11:41:59
【问题描述】:

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

  1. 对于以辅音开头的单词,初始元音之前的所有字母都放在单词序列的末尾。然后,添加ay
  2. 对于以元音开头的单词,将初始元音与第一个辅音或辅音簇一起移动到单词的末尾并添加ay
  3. 对于没有辅音的单词添加way

测试:

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

变成了

itewray away ethodmay atthay illway 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();

    }

【问题讨论】:

  • 你能把formatting整理一下吗?
  • 你考虑过使用 if else 结构吗?在最后一个 else 中,您可以为任何不匹配任何规则的单词实现例外。
  • @Dijkgraaf 是的,我已经尝试过了,但它变得一团糟并给出了各种错误的输出。我可以使它工作的唯一方法是分隔 if 语句。
  • 这需要全部在一种方法中吗?将其分解为调用几个较小的方法来处理工作对于非家庭作业的情况很有好处。
  • 你为什么写"homework"?如果不是家庭作业,那是什么?如果是,那为什么要在它周围加上"

标签: c#


【解决方案1】:

试一试:

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 away ethodmay atthay illway onvertcay anay ishenglay entencesay ointay igpay atinlay

【讨论】:

    猜你喜欢
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2010-12-22
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    相关资源
    最近更新 更多