字符串逆序(递归实现)
题目内容
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:
char arr[] = “abcdef”;
逆序之后数组的内容变成:fedcba
题目分析
- 逆序打印:字符串本身不变,你反着输出即可
反向排列:修改字符串的本身,把字符串给倒过来 - 不用递归实现
先创建一个 left= 0;
在创建一个right = size-1;
交换 left 和right位置元素;
left++
right– - 递归实现
进行拆分
代码实现
- 非递归实现
#include<stdio.h>
#include<stdlib.h>
void reverseString(char str[])//形参等价于char* str 将数组首地址传进来,会隐式转化为指针
{
int size = strlen(str);
int left = 0;
int right = size - 1;
while (left < right)
{
int tem = str[left];
str[left] = str[right];
str[right] = tem;
left++;
right--;
}
}
int main()
{
//class94 _0510
char str[] = "abcd";
reverseString(str);
int size = strlen(str);
printf("%s\n", str);
}
结果:
- 递归实现
#include<stdio.h>
#include<stdlib.h>
void reverseString2(char str[])
{
int size = strlen(str);
if (size == 0 || size == 1)
{
return;
}
//交换边缘元素
char tem = str[0];
str[0] = str[size - 1];
str[size - 1] = '\0';
//递归的来处理中间元素
//为了得到中间元素,我们需要做两件事
//1.str+1得到中间字符串的起始位置,
//2.需要把 size-1 位置的元素设置为‘\0’
//递归操作
reverseString2(str + 1);
//刚才的是临时的把size -1的位置设为‘\0’了,
//我们递归完要记得 把 size-1 位置给还原成合理的值
str[size - 1] = tem;
int main()
{
char str[] = "abcd";
reverseString2(str);
int size = strlen(str);
printf("%s\n", str);
}
结果: