将参数字符串中的字符反向排列
一、题目描述
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
1、方法一:递归实现
思路:先将最后字符放到第一个数的地址,为了可以判断下一次交换是否结束,把最后一个字符换为‘ ’ 。再将第二个字符和倒数第二个字符交换后,再将第一个数放到最后一个字符的地址。直到字符串长度为1或0时,停止交换。
递归限制条件:字符串长度<=1时,停止递归。
#include <stdio.h> #include <assert.h> int my_strlen(char* str) { assert(str != NULL); int count = 0; while(*str++) { count++; } return count; } char reverse_string(char* str) { int len = my_strlen(str); char tmp = *str; //交换第一个字符和最后一个字符 (*str) = *(str + len-1); *(str + len - 1) = ; //逆序除过两端字符的中间的字符串 if (my_strlen(str + 1) >= 2) reverse_string(str + 1); *(str + len - 1) = tmp; } int main() { char arr[] = "abcdef"; reverse_string(arr); printf("%s", arr); return 0; }
2.方法二:
思路:第一个和最后一个交换,第二个和倒数第二个交换...
#include <stdio.h> #include <assert.h> int my_strlen(char* str) { assert(str != NULL); int count = 0; while(*str != ) { count++; str++; } return count; } void reverse_string(char* str) { int len = my_strlen(str); char* left = str; char* right = len + str - 1; assert(str != NULL); while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } int main() { char arr[] = "abcdef"; reverse_string(arr); printf("%s ", arr); return 0; }