C语言每日一题——倒转字符

今天分享一道题目

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

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

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

char arr[]="abcdef";

将上面的代码变成fedcba

我们首先用非递归的方法试一试
思路
在这里插入图片描述

size_t my_strlen(char* str)
{
    
    
	if ('\0' == *str)
		return 0;
	else
		return 1 + my_strlen(1 + str);
}



void reverse_string(char s[])
{
    
    
	size_t len = my_strlen(s);
	size_t left = 0;
	size_t right = len - 1;

	while (left<right)
	{
    
    
		char tmp = s[left];
		s[left] = s[right];
		s[right] = tmp;
		left++;
		right--;
	}
}

int main()
{
    
    
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s", arr);
	return 0;
}

上面就是用我们普通的方法,现在我们用递归的方式写下我们的代码
在这里插入图片描述


size_t my_strlen(char* str)
{
    
    
	if ('\0' == *str)
		return 0;
	else
		return 1 + my_strlen(1 + str);
}

void reverse_string(char* arr)
{
    
    
	size_t len = my_strlen(arr);
	char tmp = arr[0];
	arr[0] = arr[len - 1];
	arr[len - 1] = '\0';
	if (my_strlen(arr) >= 2)
		reverse_string(arr + 1);
	arr[len - 1] = tmp;

}

int main()
{
    
    
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s", arr);
	return 0;
}

这就是我们的今天的每日一题,主要是分享递归的思路

猜你喜欢

转载自blog.csdn.net/2301_76895050/article/details/131938069