为什么函数不返回字符串?

时间:2020-03-26 07:59:43

标签: c++ string algorithm recursion reverse

#include<iostream>
#include<string.h>
using namespace std;

string revString(string s,string copy,int i,int j)
{   
    if(i==s.length())
        return copy;//if 'i' reaches to the length of the string it returns the copied value
    else{
        copy[i]=s[j];//copying the string s into copy
        return revString(s,copy,++i,--j);// calling recursively 
    }
}

int main()
{
    string s,copy;
    cout<<"Enter a string without entering spaces\n";   
    cin>>s;
    int i=0,j=s.length()-1;
    cout<<revString(s,copy,i,j);//function for reversing the string
    return 0;
}

在这里,我尝试使用递归将字符串's'复制到字符串'copy'中,但是该函数未返回任何内容。

2 个答案:

答案 0 :(得分:0)

您的处理方法不错,但是假设您有100个字符,那么它将迭代100次。取而代之的是,您可以将字符串的后半部分与字符串的后半部分相反,甚至不必传递太多参数。

这是我的提议

#include<iostream>
#include<string.h>
using namespace std;

string revString(string s, int i = 0)
{
    if((int)(s.length()  / 2) == i)
        return s;
    else{
        char t;
        t = s[i];
        s[i] = s[s.length() - 1 - i];
        s[s.length() - 1 - i]=t;
        return revString(s, ++i);// calling recursively 
    }
}

int main()
{
    string s;
    cout<<"Enter a string without entering spaces\n";   
    cin>>s;;
    cout<<revString(s);//function for reversing the string
    return 0;
}

答案 1 :(得分:0)

因为尚未为copy变量分配内存,而是尝试为其分配值。我建议您阅读有关C ++ string类中的内存分配的更多信息。

只需对代码进行最少的改动,就可以在调用revString()函数之前添加以下代码片段来使其工作:

copy.resize(s.size());