用c++编写一个void Reverse(string &s)函数,还要用递归,使字符串倒序。下面是我的源程序。

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

void Reverse(string &s)
{
char *p = const_cast<char*>(s.c_str());
static int i = 0;
if (*(p+s.length())=='\0')
{
return;
}
char temp;
for (char *p1 = p+s.length()-1,temp = *p1;p1!=p+i;p1--)
{
*(p1) = *(p1-1);
}
*(p+i) = temp;
i++;
Reverse(s);
}

int _tmain(int argc, _TCHAR* argv[])
{
string str("danger");
Reverse(str);
cout<<str<<endl;
system("pause");
return 0;
}
我知道我的算法和程序结构比较烂,我只是想知道我为什么错了。。。。
提供较优质算法源码的加分。
http://zhidao.baidu.com/question/401364071.html
这个除外。

第1个回答  推荐于2016-01-18
你这个当然不行了,在第一趟递归的时候,就进入了if语句,结束了递归调用了。
我改写的程序:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

void Reverse(string &s)
{
static int i = 0;
int len = s.length();
char c;
if(i >= s.length() / 2)
return;
c = s[i];
s[i] = s[len - i - 1];
s[len - i - 1] = c;
i++;
Reverse(s);
}

int _tmain(int argc, _TCHAR* argv[])
{
string str("danger");
Reverse(str);
cout<<str<<endl;
system("pause");
return 0;
}追问

额。。可不可以帮我把我那个程序改对一下。
把这句改成if (*(p+i)=='\0')还是不对啊。。
我主要是想搞懂为什么错。。。
麻烦了。。。3Q

追答

改好了。思路不错
#include "stdafx.h"
#include
#include
using namespace std;

void Reverse(string &s)
{
char *p = const_cast(s.c_str());
static int i = 0;
if (i == s.length()-1)
{
return;
}
char *p1 = p+s.length()-1,temp = *p1;
for (;p1!=p+i;p1--)
{
*(p1) = *(p1-1);
}
*(p+i) = temp;
i++;
Reverse(s);
}

int _tmain(int argc, _TCHAR* argv[])
{
string str("danger");
Reverse(str);
cout<<str<<endl;
system("pause");
return 0;
}

本回答被提问者采纳
第2个回答  2012-04-23
//算法也不行,全程C++写了下。看能看过去眼了吗
#include<iostream>
#include<string>
using namespace std;
void Reverse(string &str, const string::size_type &size,string::size_type n){
string temp=str;
if(size/2==n)
return;
temp[n]=str[size-1-n];
temp[size-1-n]=str[n];
str=temp;
Reverse(str,size,++n);
}
int main()
{
string str("abcdefghijklmnopqrst");
string::size_type size=str.size();
Reverse(str,size,0);
cout<<str<<endl;
system("pause");
return 0;
}追问

哥哥你都不符合题目要求啊。。。只有一个传递引用的参数

追答

//哈哈,你说的对。写完以后优化时改成上面那样了。要符合题目的话你看下面:
#include
#include
using namespace std;
void Reverse(string &str){
string::size_type size=str.size();
static string::size_type n=0;
string temp=str;
if(size/2==n)
return;
temp[n]=str[size-1-n];
temp[size-1-n]=str[n];
str=temp;
++n;
Reverse(str);
}
int main()
{
string str("abcdefghijklmnopqrst");
Reverse(str);
cout<<str<<endl;
system("pause");
return 0;
}

相似回答