c++ - 不使用标准函数反转字符串

标签 c++ string recursion reverse

我最近在面试时被问到这个问题。作为一名应届毕业生,并且只从事了大约 2 年的编程工作(所有学校工作),我感到很茫然。我有一个模糊的想法,但我确定我失败了。这是我写的:

string Reverse(string word, string reversed)
{
    if(word.length() == 0)
    {
        return reversed;
    }
    else
    {
        string temp;
        reversed = word.substr(0,1) + reversed;
        temp = word.substr(1);
        Reverse(temp, reversed);
    }

    return reversed;
}

现在我回家了,我正在测试它,返回的只是输入中的第一个字母。我隐约熟悉递归的概念,但我显然在这方面失败了。非常感谢任何帮助/指示/建议。谢谢。

编辑: 在 Dennis Meng 的帖子之后,我做了以下更改:

string Reverse(string word, string reversed)
{
    if(word.length() == 0)
    {
        return reversed;
    }
    else
    {
        string temp;
        reversed = word.substr(0,1) + reversed;
        temp = word.substr(1);
        return Reverse(temp, reversed);
    }
}

现在,我得到了正确的返回值。非常感谢你。

最佳答案

哪里出了问题:

    else
    {
        string temp;
        reversed = word.substr(0,1) + reversed;
        temp = word.substr(1);
        Reverse(temp, reversed); // <-- Here's your problem
    }

    return reversed;
}

您知道调用应该返回正确答案,那为什么不直接返回呢?换句话说,如果你这样做了会怎样

    else
    {
        string temp;
        reversed = word.substr(0,1) + reversed;
        temp = word.substr(1);
        return Reverse(temp, reversed);
    }
}

相反?为什么您的代码只返回第一个字母的细节涉及按引用传递/按值传递;由于按值传递的原因,您实际上从未使用过递归调用中完成的操作。 (您刚刚调用电话并丢弃了它返回的内容。)

关于c++ - 不使用标准函数反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11888106/

相关文章:

Python 使用递归反转字符串

c# - 如何将 C++ union 类型转换为 C# 代码?

c++ - 在模板 C++ 类中初始化 const 的 const 数组

c++ - 在 C++ 和 Armadillo 中将 sqrt(-1) 乘以矩阵

java - StringUtils vs!=空

c++ - .h 文件中的字符串预定义并使用它来过滤用户输入

c++ - 了解 std::string 的效率

c++ - SDL : blitting on background instead of screen?

c 递归太深

algorithm - 如何在 Scheme 中查找列表的分区