C# 英语到拉丁语#

C# 英语到拉丁语#,c#,C#,刚把这道猪拉丁题当作“家庭作业”。我得到的条件是: 对于以辅音开头的单词,首元音之前的所有字母都放在单词序列的末尾。然后,添加ay 对于以元音开头的单词,将首元音与第一个辅音或辅音串一起移动到单词末尾,并添加ay 对于没有辅音的单词,添加way 通过以下方式进行测试: 写一个将英语句子转换成拉丁语的方法 那变成了 这是一个很好的解决方法,我会在一天之内把它带到一个很好的地方 它做了它应该做的事情,但有一个例外不在规则中,但我想了想,我不知道如何实施它。我创建的方法完全符合问题的要求,但如果我尝试

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

  • 对于以辅音开头的单词,首元音之前的所有字母都放在单词序列的末尾。然后,添加
    ay
  • 对于以元音开头的单词,将首元音与第一个辅音或辅音串一起移动到单词末尾,并添加
    ay
  • 对于没有辅音的单词,添加
    way
    通过以下方式进行测试:

    写一个将英语句子转换成拉丁语的方法

    那变成了

    这是一个很好的解决方法,我会在一天之内把它带到一个很好的地方

    它做了它应该做的事情,但有一个例外不在规则中,但我想了想,我不知道如何实施它。我创建的方法完全符合问题的要求,但如果我尝试将一个全辅音单词转换为piglatin,它将不起作用。例如,
    grrrr
    转换成piglatin应该是
    grrrray


    公共静态字符串ToPigLatin(字符串语句文本)
    {
    字符串元音=“AEIOUaeiou”;
    //字符串cons=“bcdfghjklmnpnpqrstvwxyzbcdfghjklmnpqrstvwxyz”;
    列表新词=新列表();
    foreach(sentencetext.Split(“”)中的字符串词)
    {
    if(word.Length==1)
    {
    添加(单词+方式);
    }
    if(word.Length==2&&元音.Contains(单词[0]))
    {
    新增(word+“ay”);
    }
    if(word.Length==2&&vouels.Contains(单词[1])&&&vouels.Contains(单词[0]))
    {
    newWords.Add(word.Substring(1)+word.Substring(0,1)+“ay”);
    }
    if(word.Length==2&&!元音.Contains(单词[1])&&&!元音.Contains(单词[0]))
    {
    新增(word+“ay”);
    }                
    for(int i=1;i2)
    {
    newWords.Add(word.Substring(i)+word.Substring(0,i)+“ay”);
    打破
    }
    }
    }            
    返回字符串。Join(“,newWords);
    }
    静态void Main(字符串[]参数)
    {
    //Console.WriteLine(“输入一个句子以转换为拉丁语:”);
    //string sentencetext=Console.ReadLine();
    string pigLatin=ToPigLatin(“编写一个将英语句子转换为pigLatin的方法”);
    控制台写入线(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)));
    }
    
    给出:

    GRRRAY It’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’


    你能整理一下吗?你考虑过使用if-else结构吗?在最后一个例子中,您可以对任何不符合任何规则的单词实现异常。@Dijkgraaf是的,我试过了,但它变得一团糟,并给出各种错误的输出。我唯一能让它工作的方法就是分离if语句。这需要全部放在一个方法中吗?把这个分解成几个较小的方法来处理这项工作,对于没有家庭作业的情况是有好处的。你为什么写“家庭作业”?如果不是作业,那是什么?如果是,那么为什么要在其周围放置
    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);