我最近在面试时被问到这个问题。作为一名应届毕业生,并且只从事了大约 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/