#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
这个除外。
额。。可不可以帮我把我那个程序改对一下。
把这句改成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;
}
哥哥你都不符合题目要求啊。。。只有一个传递引用的参数
追答//哈哈,你说的对。写完以后优化时改成上面那样了。要符合题目的话你看下面:
#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;
}