码迷,mamicode.com
首页 > 其他好文 > 详细

将参数字符串中的字符反向排列,递归实现

时间:2019-04-12 21:53:58      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:这一   一个   return   efi   下标   理解   ++   元素   printf   

这是面试中出现频率较高的问题,可以使用循环实现逆置也可以用递归的实现,首先为大家展示循环的方法,这是比较简单也更容易理解的,下面看代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
Reverse(char arr[],int left,int right)
{
char tmp;
while (left < right) //当数组左下标小于右下标是进行循环逆置数组
{
tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[80] = "0"; //对数组初始化
scanf("%s", &arr);
int left = 0; //将数组左下标设置为0
int right = strlen(arr) - 1;//计算出 数组的右下标
Reverse(arr,left,right);
printf("%s", arr);
system("pause");
return 0;
}

下面我们来看如何用递归的方法将字符串数组进行逆置,比较而言难以理解但只要搞清楚递归的过程便将复发的问题简单化了,通过代码来说明问题
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
Reverse(char p)
{
char tmp = 0;
int len = strlen(p);
tmp =
p;
p = (p + len - 1);
(p + len - 1) = ‘\0‘; //将最后一个元素放成‘\0’是为了在下一次计算长度时更加方便,也是用递归实现的必要条件
if (strlen(p + 1)>1)//判断第一次交换完后的字符串长度是否大于1,小于1则不需要交换了
{
Reverse(p + 1);//指向下一个元素,递归
}
(p + len - 1) = tmp; //此操作前是递的过程,而这一步则是归的过程
}
int main()
{
char arr[] = "0";
scanf("%s", &arr);
Reverse(arr);
printf("%s", arr);
system("pause");
return 0;
}

由此可见递归的方法虽然代码简单但是思考起来比较复杂这也是普遍现象,希望大家可以很好的理解这两份代码

将参数字符串中的字符反向排列,递归实现

标签:这一   一个   return   efi   下标   理解   ++   元素   printf   

原文地址:https://blog.51cto.com/14239789/2378044

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!