昨晚我使用Arrays弄乱了Piglatin,发现我无法逆转这个过程。如何移动短语并在单词的末尾取出Char的“a”和“y”并返回短语中的原始单词。
例如,如果我输入“piggy”,它会以“iggypay”移出单词piggy,因此“p”位于单词的末尾,并且附加“ay”。
以下是示例代码,您也可以尝试使用它。
public string ay;
public string PigLatin(string phrase)
{
string[] pLatin;
ArrayList pLatinPhrase = new ArrayList();
int wordLength;
pLatin = phrase.Split();
foreach (string pl in pLatin)
{
wordLength = pl.Length;
pLatinPhrase.Add(pl.Substring(1, wordLength - 1) + pl.Substring(0, 1) + "ay");
}
foreach (string p in pLatinPhrase)
{
ay += p;
}
return ay;
}
你会注意到这个例子没有被编程为找到元音并将它们与“ay”一起追加到最后。只是一种基本的方式。
如果您想知道如何扭转上述情况,请尝试使用uPiglatinify
这个例子 public string way;
public string uPigLatinify(string word)
{
string[] latin;
int wordLength;
// Using arrraylist to store split words.
ArrayList Phrase = new ArrayList();
// Split string phrase into words.
latin = word.Split(' ');
foreach (string i in latin)
{
wordLength = i.Length;
if (wordLength > 0)
{
// Grab 3rd letter from the end of word and append to front
// of word chopping off "ay" as it was not included in the indexing.
Phrase.Add(i.Substring(wordLength - 3, 1) + i.Substring(0, wordLength - 3) + " ");
}
}
foreach (string _word in Phrase)
{
// Add words to string and return.
way += _word;
}
return way;
}
答案 0 :(得分:2)
请不要采取错误的方式,但是虽然你可以让人们在这里给你C#代码来实现你想要的算法,但我怀疑如果你想了解它是如何工作的还不够。要学习编程的基础知识,有一些很好的教程可以深入研究(无论是网站还是书籍)。特别是,如果你渴望成为一名程序员,你将不仅需要学习如何编写代码。在您的示例中:
您应首先编写PigLatin函数应该执行的规范。想想所有的角落案例:如果第一个字母是元音怎么办?如果一开始有几个辅音怎么办?如果只有 辅音怎么办?如果输入以数字,括号或空格开头怎么办?如果输入字符串为空怎么办?准确记下在所有这些情况下应该发生的事情 - 即使它是“抛出异常”。
只有这样才能根据规范实现算法(即编写实际的C#代码)。执行此操作时,您可能会发现规范不完整,在这种情况下,您需要返回并更正它。
代码完成后,您需要测试。在几个测试用例上运行它,尤其您在上面提到的角落情况:例如,尝试PigLatin("air")
,PigLatin("x")
,PigLatin("1")
,{{1}在每种情况下,首先要让自己了解您期望的行为,然后查看行为是否符合您的期望。如果没有,您需要返回并修复代码。
一旦你实现了前向PigLatin算法并且它可以工作(读取:传递你所有的测试用例),那么你已经具备了自己编写反向函数所需的技能。我保证你会感到成功和兴奋!然而,如果你只是从这个网站上复制代码,那么你就会感到愚蠢,因为你会认为其他人可以做到而你却做不到。
当然,我们很乐意帮助您解决具体的技术问题,例如“PigLatin("")
和ArrayList
之间有什么区别?”或“范围是什么?本地变量是什么意思?“(但首先搜索 - 之前可能已经提出过这些问题) - 但您可能不应该要求完整地编写代码并为您完成。
答案 1 :(得分:0)
将短语拆分为单词并在转换后重新组合单词的工作与原始情况相同。困难在于非猪拉丁语中的单词。通过一些错误检查,我想你可以这样做:
string UnPigLatinify(string word)
{
if ((word == null) || !Regex.IsMatch(word, @"^\w+ay$", RegexOptions.IgnoreCase))
return word;
return word[word.Length - 3] + word.Substring(0, word.Length - 3);
}
正则表达式只是检查以确保单词长度至少为3个字母,由字符组成,并以“ay”结尾。
实际转换采用第三个字母到最后一个字母(原始的第一个字母),并将该字的其余部分添加为“ay”和原始字母。
这是你的意思吗?