C/C++ 字符串反转的几种方法

0. 环境说明:

windows7 + VSCode + mingw32

1. 使用 库方法:reverse()

/* 
* 功能:字符串反转
*/

#include 
#include 
#include 

using namespace std;


int main(void)
{
   string str = "Hello, world!";
   reverse(str.begin(), str.end());
   cout << str << endl;

    return 0;
}

2. 自己编写 Reverse()函数

# include 
#include 

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 
#include 
#include 

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

https://blog.csdn.net/yr12Dong/article/details/73386839

你可能感兴趣的:(C)