/*
名称:字符串反转的两种方法
说明:此处用了两种方法进行前后对称字符串互换,常规的方法是第一个字符和最后
一个字符互换,第二个字符和倒数第二个字符互换; 第二个方法是利用函数递归,
即str为abcde,每次递归使之处理的str为bcde、cde、de、e,然后e、ed、edc、edcb
edcba,达到反转的效果。
虽然这个例子中递归迭代并没有很大的优势,但是这种大而化小,分而治之的思想还
是挺重要的。
*/
#include<iostream>
using namespace std;
class ReverStr
{
public:
string str;
ReverStr(string str)
{
this->str = str;
}
//利用字符反转实现
string ReverseStr1()
{
int i = 0,j = str.size()-1;
char c;
while(i < j)
{
c = str[i];
str[i] = str[j];
str[j] = c;
++i;
--j;
}
return str;
}
//利用函数递归实现
string ReverseStr2(string str)
{
string rec_str;
int len;
if(str.size() == 1) //如果是最后一个字符,则迭代停止 ,返回
return str;
else
{
rec_str = ReverseStr2(str.substr(1,str.size()));
cout<<"rec_str:"<<rec_str<<endl;
//将返回的结果和本次迭代str的第一个字符反转,即若str为de,返回的是e,反转后为ed
len = rec_str.size();
rec_str.resize(len+1);
rec_str[len] = str[0];
return rec_str;
}
}
//显示结果
void showRes()
{
cout<<str<<endl;
}
};
int main()
{
//test
ReverStr ex("abcdefgsd");
ex.ReverseStr1();
ex.showRes();
cout<<ex.ReverseStr2("abcde")<<endl;
return 0;
}