#include<iostream>
#include<string.h>
using namespace std;
//交换功能来交换字符的字符串这个简单的C++递归函数反转字符串有什么问题?
void swap(char &x,char &y){
char temp;
temp=x;
x=y;
y=temp;
}
//递归函数扭转串
string reverse(string s,int be,int en){
//base case
if(be>=en){
return s ;
}
//working
swap(s[be],s[en]);
reverse(s,be+1,en-1);
}
int main(){
string s,s1,s2;
cin>>s;
s1=s;
int l=s.length();
s2=reverse(s,0,l-1);
//检查是否反向串是相同原始字符串
if (s1==s2)
{
cout<<"true"<<endl;
}
else{
cout<<"false"<<endl;
}
return 0;
}
这听起来像你可能需要学习如何使用调试器来遍历代码。使用一个好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏离的位置。如果你打算做任何编程,这是一个重要的工具。进一步阅读:[如何调试小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) – NathanOliver
此外,如果您的编译器未正确警告您'reverse'()无法返回值,找一个更好的C++编译器。你的代码是未定义的行为,并且每个自尊的C++编译器至少应该发出一个非常响亮,令人厌恶的投诉。 –
您需要'返回反向(s,be + 1,en-1);',不仅仅是调用它 - 这样您将结果传递回堆栈。 – hnefatl