将参数字符串中的字符反向排列,不是逆序打印。用递归实现

Posted 再吃一个橘子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将参数字符串中的字符反向排列,不是逆序打印。用递归实现相关的知识,希望对你有一定的参考价值。

编写一个函数 reverse_string(char * string)(递归实现)

实现:将参数字符串中的字符反向排列,不是逆序打印。

要求:不能使用C函数库中的字符串操作函数。

比如:

char arr[] = "abcdef";

逆序之后数组的内容变成:fedcba

我们先写一个这个代码,其实下面这段代码并不满足要求:不能使用C函数库中的字符串操作函数。也没有使用递归       但是可以实现想要的效果。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//编写一个函数 reverse_string(char * string)(递归实现)
//实现:将参数字符串中的字符反向排列,不是逆序打印。
//要求:不能使用C函数库中的字符串操作函数。

void reverse_string(char* str) {
	int len = strlen(str);
	int left = 0;//'a'
	int right = len - 1;
	while (left<right) {
		int temp = 0;
		temp = str[left];
		str[left] = str[right];
		str[right] = temp;
		left++;
		right--;
	}
}
int main()
{
	char arr[10] = "abcdef";
	//数组名就是首元素的地址
	//首元素是char类型,所以char*接受地址

	reverse_string(arr);
	printf("%s\\n", arr);//期望结果是fedcba
	return 0;
}

那么符合题意的代码应该怎么写呢?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//编写一个函数 reverse_string(char * string)(递归实现)
//实现:将参数字符串中的字符反向排列,不是逆序打印。
//要求:不能使用C函数库中的字符串操作函数。
int my_strlen(char *str) {
	int count = 0;
	while (*str != '\\0') {
		count++;
		str++;
	}
	return count;
}
void reverse_string(char* str) {
	int len = my_strlen(str);
	char temp = str[0];
	str[0] = str[len - 1];
	str[len - 1] = '\\0';
	if (my_strlen(str + 1) >= 2) {
		reverse_string(str + 1);
	}
	str[len - 1] = temp;
}
int main()
{
	char arr[10] = "abcdef";
	//数组名就是首元素的地址
	//首元素是char类型,所以char*接受地址

	reverse_string(arr);
	printf("%s\\n", arr);//期望结果是fedcba
	return 0;
}

以上是关于将参数字符串中的字符反向排列,不是逆序打印。用递归实现的主要内容,如果未能解决你的问题,请参考以下文章

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

C语言 - 递归实现字符串逆序打印

递归打印字符串的所有排列(Javascript)

C语言程序:用递归法将一个整数n转化成字符串

C 语言字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序打印字符串 | 递归要素 | 递归停止条件 | 递归操作 )

递归打印,没有任何循环