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

这道题要求逆序字符串,写一个递归函数实现这个功能并且不能使用库函数。那么可以这样考虑

例如:“abcdefg”  ,既然要递归实现,那么可以先逆序 a 和 g ,变成 “gbcdefa” ,然后再逐层递归。

那么对于交换首字符和最后一个字符,我们依然可以用指针 str 来表示,要知道最后一个字符,就得知道字符串长度,字符串长度-1就是我们想要的最后一个字符的数组下标。但是题目不允许用库函数,所以用到上次自己实现到的  my_strlen  函数求出长度。

我们将首字符拿出来,存到临时变量 tmp 中,然后将最后一个字符放在首字符的位置,此时我们需要在末尾补一个 "\0",因为如果不这样的话,我们无法在递归中找到最后一个字符,补上了之后再调用 reverse_string 函数,进行中间的字符串的首尾交换。再把刚刚的首字符放在末尾位置即可。代码如下:

define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

int my_strlen(const char*str)
{
	assert(str != NULL);
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

void reverse_string(char *str)
{
	int len = my_strlen(str);
	char tmp = 0;
	tmp = *str;
	*str = *(str + len - 1);
	*(str + len - 1) = '\0';
	if (my_strlen(str + 1)>1)
		reverse_string(str + 1);
	*(str + len - 1) = tmp;
}


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

猜你喜欢

转载自blog.csdn.net/Miss_Monster/article/details/81454839