今天分享一道题目
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
char arr[]="abcdef";
将上面的代码变成fedcba
我们首先用非递归的方法试一试
思路
size_t my_strlen(char* str) { if ('\0' == *str) return 0; else return 1 + my_strlen(1 + str); } void reverse_string(char s[]) { size_t len = my_strlen(s); size_t left = 0; size_t right = len - 1; while (left<right) { char tmp = s[left]; s[left] = s[right]; s[right] = tmp; left++; right--; } } int main() { char arr[] = "abcdef"; reverse_string(arr); printf("%s", arr); return 0; }
上面就是用我们普通的方法,现在我们用递归的方式写下我们的代码
size_t my_strlen(char* str) { if ('\0' == *str) return 0; else return 1 + my_strlen(1 + str); } void reverse_string(char* arr) { size_t len = my_strlen(arr); char tmp = arr[0]; arr[0] = arr[len - 1]; arr[len - 1] = '\0'; if (my_strlen(arr) >= 2) reverse_string(arr + 1); arr[len - 1] = tmp; } int main() { char arr[] = "abcdef"; reverse_string(arr); printf("%s", arr); return 0; }
这就是我们的今天的每日一题,主要是分享递归的思路