代码之家  ›  专栏  ›  技术社区  ›  Nightforce2

使用数组的Piglatin

  •  0
  • Nightforce2  · 技术社区  · 16 年前

    例如,如果我输入“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”一起附加到结尾的。只是一个基本的方法。

    如果你想知道如何扭转上述尝试升级这个例子

        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 回复  |  直到 15 年前
        1
  •  0
  •   Chris Schmich    16 年前

    将短语拆分为单词并在转换后重新组合单词的工作与原来的情况相同。困难在于将一个单词的拉丁语化。通过一些错误检查,我想您可以这样做:

    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”和原来的字母。

    你是这个意思吗?

        2
  •  2
  •   Timwi    16 年前

    请不要误会,虽然你可以让这里的人给你C代码来实现你想要的算法,但如果你想了解它的工作原理,我怀疑这是不够的。为了学习编程的基础知识,有一些好的教程可以深入研究(无论是网站还是书籍)。特别是,如果你想成为一名程序员,你需要学习的不仅仅是如何编写代码。在您的示例中:

    • 你应该先写一封信 规范 你的PigLatin函数应该做什么。想想所有的例子:如果第一个字母是元音怎么办?如果开头有几个辅音呢?如果有呢 只有 辅音?如果输入以数字、括号或空格开头怎么办?如果输入字符串为空怎么办?写下在所有这些情况下应该发生什么,即使它抛出了一个异常。

    • 只有这样你才能 实施 根据规范的算法(即编写实际的C代码)。执行此操作时,您可能会发现规范不完整,在这种情况下,您需要返回并更正它。

    • 代码完成后,您需要 测试 是的。在几个测试用例上运行它, 尤其地 PigLatin("air") , PigLatin("x") , PigLatin("1") , PigLatin("") 期待 ,然后查看行为是否符合您的预期。如果没有,你需要回去修复代码。

    一旦实现了前向PigLatin算法 而且很有效 (阅读:通过所有测试用例),那么您就已经具备了自己编写反向函数所需的技能。我 保证 你知道你会感到成就和兴奋!然而,如果你只是从这个网站上复制代码,你会觉得自己很愚蠢,因为你会认为其他人可以做到,而你不能。

    当然,我们很乐意帮助您解决一些具体的技术问题,例如 ArrayList 和 List<string> ? 或者是什么 局部变量的作用域 什么意思?(但是首先搜索这些可能已经被问过了)但是你可能不应该要求为你完整地编写和完成代码。