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

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

#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;
}

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

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

时间: 2024-07-30 12:44:53

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

【c语言】编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。

/*编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列. 要求:不能使用C函数库中的字符串操作函数.*/ #include <stdio.h> #include <assert.h> void reverse_string(char const * string) { assert( string != NULL ); if( *string != '\0' ) { string++; reverse_string

编写一个函数将参数字符串中的字符反向排列

编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列. 要求:不能使用C函数库中的字符串操作函数. 注意:将参数字符串中的字符反向排列,不是反向输出. 代码如下: #include<stdio.h> #include<stdlib.h> #include<assert.h> int my_strlen(char *str)//求字符串长度 { int count=0; while(*str++) { co

将参数字符串中的字符反向排列

//编写一个函数reverse_string(char * string)(递归实现) //实现:将参数字符串中的字符反向排列. //要求:不能使用C函数库中的字符串操作函数. //第一种方法:递归法 #include <stdio.h> int reverse_string(char * string) {  if (*string != '\0')  {   string++;   reverse_string(string);   printf("%c", *(str

【C语言】编写一个函数reverse_string(char * string)(递归实现),将参数字符串中的字符反向排列,不能使用C函数库中的字符串操作函数。

//编写一个函数reverse_string(char * string)(递归实现) //实现:将参数字符串中的字符反向排列. //要求:不能使用C函数库中的字符串操作函数. #include <stdio.h> #include <assert.h> void reverse_string(char const * string) { assert( string != NULL ); if( *string != '\0' ) { string++; reverse_stri

C语言 编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列

编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列. #include <stdio.h> #include <string.h> #include <assert.h> int reverse_string(char * str) { assert(str); int len=strlen(str); char *ch=str+len-1; while(len>1) { char tmp=*st

C语言编程 递归方法与非递归方法 实现将参数字符串中的字符反向排列

//题目要求要求:不能使用C函数库中的字符串操作函数(否则本题也没什么意义了啊) <1>非递归方法此方法基本思想是设立两个指针,分别指向字符串的头尾并且依次交换所指向的数据,代码中为left和right源代码: #include<stdio.h> #include<stdlib.h> #include<string.h>//因为要使用strlen()语句 void reverse_string(char str[]) { int temp; char *le

C#删除字符串中重复字符的方法

本文实例讲述了C#删除字符串中重复字符的方法.分享给大家供大家参考.具体实现方法如下: 代码如下: #region 删除重复字符 string s = "sdfffffsrlkjesgljfdg03940864e5=_0R9DTGR98YUI\\|||'\\???fdf///"; Response.Write("<br/>String:" + s + "<br/>Result:"); IEnumerable<char

要求将字符串中的字符按字符出现的次数从小到大进行排序

package com.xiawei.sort; import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry; public class TestString {//要求将字符串中的字符按字符出现的次数

1.判断字符串中的字符是否唯一

如果我们假设字符集是ASCII字符,那么我们可以开一个大小为256的bool数组来表征每个字符的出现.数组初始化为false,遍历一遍字符串中的字符,当bool数组对应位置的值为真, 表明该字符在之前已经出现过,即可得出该字符串中有重复字符.否则将该位置的bool数组 值置为true. 核心代码: 1 bool isCharUnique(string s) 2 { 3 bool a[256]; 4 int i =0; 5 memset(a,0,sizeof(a)); 6 int len = s.