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)的类型
是字符串。