1、非递归实现
1.1思路:
给连两个指针,left放在字符串左侧,right放在最后一个有效字符位置。
交换两个指针位置上的字符
left指针往后走,right指针往前走,只要两个指针没有相遇,继续2,两个指针相遇后,逆置结束
1.2代码实现:
#include<stdio.h> #include<string.h> void reverse_string(char* arr) { char* left = arr; char* right = arr + strlen(arr) - 1; while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } int main() { char arr[]="abcdefg"; reverse_string(arr); printf("%s", arr); return 0; }
2、递归实现
2.1思路:
交换a和g
以递归的方式逆置源字符串的剩余部分,剩余部分可以看成一个有效的字符串,再以类似的方式逆置
2.2代码实现:
#include<stdio.h> #include<string.h> void reverse_string(char* arr) { int len = strlen(arr); char tmp = *arr; *arr = *(arr + len - 1); *(arr + len - 1) = '\0'; if (strlen(arr + 1) >= 2) reverse_string(arr + 1); *(arr + len - 1) = tmp; } int main() { char arr[]="abcdefg"; reverse_string(arr); printf("%s", arr); return 0; }