#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'中,但是该函数未返回任何内容。
答案 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());