当我尝试在 C++ 中反转它时,我得到了相同的字符串。
我读到递归是逆转事物的好方法。我试图通过返回字符串的第一个字符并调用相同的函数来实现递归算法,并删除第一个字符直到字符串的大小为 1。我的第一个函数删除字符串的第一个字符,第二个函数将其反转:
string deleteFirstElement(string input) {
if (input.size() == 1) {
return input;
}
// This loop brings the first element to the last position
for (int i = 0; i < input.size()-1; i++) {
char temp;
temp = input.at(i);
input.at(i) = input.at(i+1);
input.at(i + 1) = temp;
}
input.pop_back(); // Delete last element of the string
return input;
}
string reverseit(string input) {
if (input.size() == 1) {
return input;
}
else {
return input.at(0) + reverseit(deleteFirstElement(input));
}
}
但为什么我得到相同的字符串却没有反转?
最佳答案
你得到了相同的字符串,因为你再次构建了相同的字符串。 使用“ABC”示例,您将看到该函数的作用:
reverseit("ABC") 返回 'A' + reverseit("BC")
reverseit("BC") 返回 'B' + reverseit("C")
reverseit("C") 返回 'C'
你想要
char firstChar = input.at(0);
return reverseit(deleteFirstElement(input)) + firstChar;
但实际上您应该研究另一种解决方案。递归
- 降低可读性
- 很慢
- 使用大量堆栈内存
- 轻松创建难以调试的无限循环
一般情况下应该尽可能避免。可以肯定的是,有些解决方案确实非常优雅,但循环几乎总是更快。
关于c++ - 试图在 C++ 中反转字符串但返回相同的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55043688/