0
点赞
收藏
分享

微信扫一扫

分别使用递归与非递归的方式实现将一个字符数组逆序

醉倾城1 2023-02-13 阅读 76

首先我们运用非递归的方式

#include<stdio.h>
int my_strlen(char arr1[])//求字符数组长度
{
int i = 0;
int count = 0;
while (arr1[i] != '\0')
{
count++;
i++;
}
return count;
}
void my_change(char arr1[], int sz)//这个交换的思路和将两个数交换的思路一样
{
int left = 0;//得到最左边数组序号
int right = sz - 1;//得到最右边数组序号但因为数组开始是从0开始的而我们求的是长度所以要减1
while (left < right)
{
char temp = arr1[left];
arr1[left] = arr1[right];
arr1[right] = temp;
left++; right--;
}
}
int main()
{
char arr1[] = "abcdefg";
int sz = my_strlen(arr1);//这里的目的就是求出这个字符数组出去\0以后的长度
my_change(arr1, sz);//交换数组内容
printf("%s", arr1);
return 0;
}

下面的就是递归实现要弄懂是怎样实现的,我们就要先了解在这个数组中我们是怎样交换内容的首先我们创建一个临时变量并将开头的内容放入临时变量中去,然后第二步将最后一个元素内容放入第一个中最后将临时变量中储存的值放入最后一个变量中。递归最重要的一步就是在完成了第二步以后我们不着急将临时变量的值存入到最后一个变量中去而是将\0先付给最后一个值然后再次调用这个函数但要将传过去的地址加1.

#include<stdio.h>
int my_strlen(char arr[])
{
int i = 0;
int count = 0;
while (arr[i] != '\0')
{
count++;
i++;
}
return count;
}
void my_change(char* arr)
{
int sz = my_strlen(arr);
char temp;
char*left = arr;
char*right =arr+sz-1;
temp = *left;
*left = *right;
*right = '\0';
if (my_strlen(arr) > 1)//当算出的元素个数为1即只有一个元素时停止递归
{
my_change(arr + 1);
}
*right = temp;
}
int main()
{
char arr[100] = "abcdefg";
int sz = my_strlen(arr);
my_change(arr);
printf("%s\n", arr);
}

分别使用递归与非递归的方式实现将一个字符数组逆序_字符数组

举报

相关推荐

0 条评论