问题描述:
- 编写一个函数 reverse_string(char * string)(递归实现)
- 实现:将参数字符串中的字符反向排列,不是逆序打印。
- 要求:不能使用C函数库中的字符串操作函数。
实现思路:见下图
#include <stdio.h>
//自定义求字符串长度函数
int Mystrlen(char* string)
{
int len = 0;
while (*string != '\0')
{
len++;
string++;
}
return len;
}
//逆置函数
void reverse(char* string)
{
//求字符串长度,找到最后一个元素的下标
int len = Mystrlen(string);
int tmp = string[0];
string[0] = string[len - 1];
string[len - 1] = '\0';
//当剩余字符串长度大于等于2时,继续反转
//等于1或者不存在剩余字符串时,结束递归
if (Mystrlen(string + 1) >= 2)
reverse(string + 1);
string[len - 1] = tmp;
}
int main()
{
char arr[] = "abcdef";
reverse(arr);
printf("%s", arr);
return 0;
}
如下图所示:
整个递归的过程是交换首尾字符, 但是交换最后一个字符时要先置’\0’,
目的是找到字符串的尾字符(即最后一个字符)。在下一次递归执行完
之后,再把尾字符置成tmp保存的首字符。