使用阵列的明胶

时间:2010-08-25 06:24:59

标签: c# arrays

昨晚我使用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;
    }

2 个答案:

答案 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”和原始字母。

这是你的意思吗?