尝试在C ++中反转字符串,但返回相同的字符串

joa*_*sdf 4 c++ sorting algorithm 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));
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,为什么我要返回相同的字符串却没有反向?

Fal*_*Ger 8

您会得到相同的字符串,因为您再次构建了相同的字符串。使用“ ABC”的示例,您将看到函数的作用:

reverseit( “ABC”)返回'A' + reverseit( “BC”)
reverseit( “BC”)返回'B' + reverseit( “C”)
reverseit( “C”)返回'C'

你想要

char firstChar = input.at(0);
return  reverseit(deleteFirstElement(input)) + firstChar;
Run Code Online (Sandbox Code Playgroud)

但是,实际上您应该考虑其他解决方案。递归

  • 降低可读性
  • 是缓慢的
  • 使用大量的堆栈内存
  • 轻松创建难以调试的无限循环

通常,应尽可能避免使用。可以肯定,有些解决方案确实很优雅,但是循环几乎总是更快。