问题描述:
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:
逆序之后数组的内容变成:fedcba
思路:
求逆序字符串,用递归函数实现:
如:“abcdef” ,先逆序 a和 f ,变成 “fbcde\0” ,再逆序b和e,变 “fecd\0” ,然后再逐层递归。
把每一层的首字符拿出来,存到临时变量 temp 中,然后将最后一个字符放在首字符的位置,此最后一个字符用 “\0”替代,这样逐层替换,直到中间的字符长度小于等于1的时候,就开始往回逐层递归。
参考代码:
//实现求数组长度 int my_strlen(char* str) { if (*str != '\0') { return 1 + my_strlen(str + 1); } return 0; } //前后元素内容交换内容 void reverse_string(char* string) { int len = my_strlen(string); char temp = 0; temp = *string; *string = *(string + len - 1); *(string + len - 1) = '\0'; if (my_strlen(string + 1) > 1) { reverse_string(string + 1); } *(string + len - 1) = temp; } int main() { char arr[] = "abcdef"; reverse_string(arr); int i = 0; for (i = 0; i < my_strlen(arr); i++) { printf("%c",arr[i]); } return 0; }
思路图解: