C/C++ 字串反轉的幾種方法
阿新 • • 發佈:2018-12-16
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; }
整理自網上看到的部落格並進行了歸納,連結如下: