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