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

Posted 跳动的bit

tags:

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

/***********************************************************************
目的:非递归编写一个函数reverse_string(char* string)将参数字符串中的字符逆序打印发。如a b c d e f \\0 -> f e d c b a \\0 (不能使用库函数)
分析:需要定位这个字符串的左右下标,在找右下标时,因规定不能使用库函数strlen,所以my_strlen模拟实现strlen,最终循环交换即可
平台:Visual studio 2017 && windows
*************************************************************************/

实现代码:

#include<stdio.h>
int my_strlen(char* str)
{
	int count = 0;
	while(*str)
	{
		count++;
		str++;
	}
	return count;
}
void reverse_string(char* str)
{
	//找到左右下标
	int left = 0;
	int right = my_strlen(str)-1 ;//不能使用strlen库函数,所以自己造一个
	//交换  
	while(left < right)
	{
		char temp = str[left];//同*(str+left)
		str[left] = str[right];
		str[right] = temp;
		left++;
		right--;
	}
}
int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s\\n", arr);//fedcba
	return 0;
}

++++++++++++++++++++++++++++++++++++++++++++++++++++++
/***********************************************************************

目的:递归编写一个函数reverse_string(char* string)将参数字符串中的字符反向排列,不是逆序打印。如a b c d e f \\0 -> f e d c b a \\0 (不能使用库函数)
分析:两端2个字符串的交换+中间字符串的反向排列
a <-> f + b c d e
b <-> e +c d
…  …
具体来说:第1步是把a存于temp;第2步是把f交换于a的位置;第3步是把原来f的位置变为\\0;第4步是递归调用reverse_string来反向排列中间的元素;第5步是将temp赋值于原来f的位置
平台:Visual studio 2017 && windows
*************************************************************************/

实现代码:

#include<stdio.h>
int my_strlen(char* str)
{
	int count = 0;
	while(*str)
	{
		count++;
		str++;
	}
	return count;
}
void reverse_string(char* str)
{
	char temp = *str;//1
	int len = my_strlen(str);
	*str = *(str +len - 1);//2
	*(str + len - 1) = '\\0';//3
	//只有2个及以上的字符时才递归
	if(my_strlen(str+1) >= 2)
	{
		reverse_string(str + 1);//4
	}
	*(str + len - 1) = temp;//5
}
int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s\\n", arr);//fedcba
	return 0;
}

图解:
在这里插入图片描述

以上是关于C语言 - 递归实现字符串逆序打印的主要内容,如果未能解决你的问题,请参考以下文章

c语言:将递归的方法将一个正整数逆序输出

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

C语言详解:函数递归专题

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

C语言-函数递归

c语言字符串逆序总结与辨析