C++ 在c++;

C++ 在c++;,c++,recursion,C++,Recursion,在网上寻找一些解决方案后,我尝试了我的代码。有一个关于通过递归进行字符串反转的算法,我尽了最大努力按照该算法编写代码。 不幸的是,我的代码只交换给定字符串中的第一个和最后一个字符,而不是第二个字符和第二个最后一个字符,依此类推。 任何帮助都将不胜感激 这是我的密码: string reverse(string s,int length,int start=0){ if (start>=length){ return s; } else{

在网上寻找一些解决方案后,我尝试了我的代码。有一个关于通过递归进行字符串反转的算法,我尽了最大努力按照该算法编写代码。 不幸的是,我的代码只交换给定字符串中的第一个和最后一个字符,而不是第二个字符和第二个最后一个字符,依此类推。 任何帮助都将不胜感激 这是我的密码:

string reverse(string s,int length,int start=0){

    if (start>=length){
        return s;
    }
    else{
        char temp=s[length];
        s[length]=s[start];
        s[start]=temp;
        reverse(s,--length,++start);
    }return s;
}

int main(void) {

    string a;cout<<"enter a string:";getline(cin,a);
    cout<<reverse(a,a.length()-1,0);
}
字符串反转(字符串s,int-length,int-start=0){
如果(开始>=长度){
返回s;
}
否则{
字符温度=s[长度];
s[长度]=s[开始];
s[开始]=温度;
反向(s,--长度,++开始);
}返回s;
}
内部主(空){

字符串a;cout您需要通过引用传递字符串,而不是通过
reverse
函数中的值传递:

string reverse(string& s,int length,int start=0){
实例:

引用工作的原因是您正在反转当前字符串,而不是临时字符串

正如注释所建议的,如果想要的效果是不改变原始字符串,那么执行递归的helper函数就可以工作了

string reverse_helper(string& s,int length,int start)
{
    if (start>=length)
        return s;
    else
    {
        char temp=s[length];
        s[length]=s[start];
        s[start]=temp;
        reverse_helper(s,--length,++start);
    }
    return s;
}

string reverse(string str, int length, int start=0)
{
    return reverse_helper(str, length, start);
}

助手函数的实例:

您需要通过引用传递字符串,而不是通过
reverse
函数中的值传递:

string reverse(string& s,int length,int start=0){
实例:

引用工作的原因是您正在反转当前字符串,而不是临时字符串

正如注释所建议的,如果想要的效果是不改变原始字符串,那么执行递归的helper函数就可以工作了

string reverse_helper(string& s,int length,int start)
{
    if (start>=length)
        return s;
    else
    {
        char temp=s[length];
        s[length]=s[start];
        s[start]=temp;
        reverse_helper(s,--length,++start);
    }
    return s;
}

string reverse(string str, int length, int start=0)
{
    return reverse_helper(str, length, start);
}

助手函数的实例:

您需要返回下一个调用
reverse()
,而不是返回
s
,后者是原始字符串的副本,并切换了第一个和最后一个字符:


您需要返回对
reverse()
的下一个调用,而不是返回
s
,后者是原始字符串的一个副本,并切换了第一个和最后一个字符:


这也将反转原始字符串,因此如果不需要,则最好将其设置为由
reverse(string,int,int)调用的辅助函数。
这也将反转原始字符串,因此如果不需要,则最好将其设置为由
reverse(string,int,int)调用的辅助函数
返回类型是字符串。那么它如何处理返回字符串和2个整数的问题呢?您不是返回字符串和2个整数,而是返回下一次调用
reverse()
的值。正如您所说,
reverse
的返回类型是字符串,因此
reverse(s,-length,++start)的类型
是string。返回类型是string。那么它如何处理返回一个字符串和两个整数的问题呢?您不是返回一个字符串和两个整数,而是返回下一次调用
reverse()
的值。正如您所说,
reverse
的返回类型是string,因此
reverse(s,-length,++start)的类型
是字符串。