0. 环境说明:
windows7 + VSCode + mingw32
1. 使用 <algorithm>库方法:reverse()
/*
* 功能:字符串反转
*/
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(void)
{
string str = "Hello, world!";
reverse(str.begin(), str.end());
cout << str << endl;
return 0;
}
2. 自己编写 Reverse()函数
# include <iostream>
#include <string>
using namespace std;
string Reverse(string str);
int main(void)
{
string strData = "hello,world!";
string strReverse = Reverse(strData);
cout << strReverse << endl;
}
string Reverse(string str)
{
int i;
int len = str.length();
for (i = 0; i < len/2; i++)
{
char c = str[i];
str[i] = str[len -i -1];
str[len -i -1] = c;
}
return str;
}
3. 将string对象转为字符数组,然后对字符数组执行反转操作,最后保存为string对象
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
// 直接使用字符数组赋值
char* strrev1(const char *str);
// 采用指针操作方式赋值
char* strrev2(const char *str);
// 直接新建字符数组,循环赋值
char* strrev3(const char *str);
//char* strrev4(const char *str);
int main(void)
{
string str = "12345";
const char *buffer = str.c_str(); // str.c_str() 返回类型为 const char*,为只读,不可以直接修改
// 直接使用字符数组赋值
cout << "直接使用字符数组赋值" << endl;
char * rev1 = strrev1(buffer);
string strRev1 = strrev1(buffer);
cout << rev1 << endl;
cout << strRev1 << endl;
delete []rev1;
// 采用指针操作方式赋值
cout << "直接采用指针操作方式赋值" << endl;
char * rev2 = strrev2(buffer);
cout << rev2 << endl;
// 直接新建字符串,循环赋值
}
/*
* 直接使用字符数组赋值
*/
char* strrev1(const char *str)
{
const size_t length = strlen(str); //获取字符串的长度
char *temp = new char[length]; // 新建一个等长度的字符数组
strcpy(temp, str); // 字符串拷贝
for (size_t i = 0; i < length/2; i++)
{
char c = temp[i];
temp[i] = temp[length -i -1];
temp[length -i -1] = c;
}
return temp; // 返回反转后的字符串
}
/*
* 采用指针操作方式赋值
*/
char* strrev2(const char *str)
{
const size_t length = strlen(str);
char *tmp = new char[length];
strcpy(tmp, str);
char *ret = tmp; // 用来最后返回数组指针
char *p = tmp + length - 1;
while(p > tmp)
{
char t = *tmp;
*tmp++ = *p;
*p-- = t;
}
return ret;
}
/**
* 直接新建字符串,循环赋值
*/
char * strrev3(const char *str)
{
size_t length = strlen(str);
char *tmp = new char[length];
for (int i = 0; i < length; i++)
{
tmp[i] = str[length - i - 1];
}
return tmp;
}
整理自网上看到的博客并进行了归纳,链接如下:
https://www.cnblogs.com/gaojun/archive/2010/04/02/1702930.html