c++ - 试图在 C++ 中反转字符串但返回相同的字符串

标签 c++ algorithm sorting reverse

当我尝试在 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/

相关文章:

c++ - 如何编写具有仅 move 属性的函数?

c++ - 为什么这个程序的输出是意外的?

c++ - 在构造函数中调用类的函数。 C++

algorithm - 我可以使用 Unix 时间作为 Lamport 时间戳吗?

可以在项目的任何文件中使用的C++变量

algorithm - Haskell:库存跨度算法

algorithm - 如何在 O(logn) 时间内找到 5 个排序列表的中位数?

c# - 列表的排序包含具有字母/数字的字符串

ios - 致力于开发库存应用程序。我正在尝试在 Realm 中保存多个对象

Python 大列表排序与存储