1. 程式人生 > >C/C++ 字串反轉的幾種方法

C/C++ 字串反轉的幾種方法

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;
}

整理自網上看到的部落格並進行了歸納,連結如下: