将一个字符串逆序有多重方式实现,下面的三种方式均是在原字符串上操作。
方式一.使用数组的方式操作
1 char *reversestr(char *str) 2 { 3 char *temp = str; 4 int indexLeft = 0; 5 int indexRight = 0; 6 if (str == NULL) 7 { 8 return NULL; 9 } 10 while(*temp != ‘\0‘) 11 { 12 indexRight++; 13 temp++; 14 } 15 //指向最后一个字符‘\0‘的前一个 16 indexRight = indexRight - 1; 17 18 while(indexRight > indexLeft) 19 { 20 char temp = str[indexLeft]; 21 str[indexLeft++] = str[indexRight]; 22 str[indexRight--] = temp; 23 } 24 25 return str; 26 27 }
方式二 .使用指针的方式操作
char *reverseStr(char *str) { char *left = str; char *right = str; if(str == NULL) { return NULL; } while (*right != ‘\0‘) { right++; } right--; while (right > left) { char temp = *right; *right++ = *left; *left++ = temp; } return str; }
方式三.不使用第三的变量
1 char *reversestr1(char *str) 2 { 3 char *left = str; 4 char *right = str; 5 if (str == NULL) 6 { 7 return NULL; 8 } 9 while(*right != ‘\0‘) 10 { 11 right++; 12 } 13 right--; 14 /*使用异或运算的特点 a = a^b^b b = a^b^a */ 15 while (right > left) 16 { 17 *left = *left ^ *right; 18 *right = *left ^ *right; 19 *left = *left ^ *right; 20 left++; 21 right--; 22 } 23 return str; 24 }
时间: 2024-10-09 21:26:16