0
点赞
收藏
分享

微信扫一扫

如何使用GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图

巧乐兹_d41f 2023-09-10 阅读 50
算法

文章目录


前言

嗨,亲爱的读者们!我是艾老虎尤,今天,我们将探索一个题目,这个题目对新手非常友好,。在这个题目中,我们将遇到各种编程元素,输入输出,条件语句,指针,循环,函数和递归,当然如果你是老手的话,也可以和我一起复习一下这些最基础的知识,话不多说,我们直接开始。


一、题目要求

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

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

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

比如:

char arr[] = "abcdef";

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

二、解题步骤

1.大概框架

代码如下(示例):

#include<stdio.h>
//返回类型  函数名     函数体
void reverse_string(char* arr)
{

}

int main()
{
	char arr[] = "abcdef";//字符串
	reverse_string(arr);//定义的函数
	return 0;
}


2.如何反向排列?


3.模拟实现strlen

代码如下(示例):

#include<stdio.h>
int my_strlen(char* arr)
{
	int count = 0;//计数器
	while (*arr != '\0')//如果这个元素不等于结束标志,进入循环
	{
		count++;//计数器自增1
		arr++;//找到下一个需要对比的元素
	}
	printf("字符串的长度是:%d\n", count);
	return count;
}

//返回类型  函数名     函数体
void reverse_string(char* arr)
{
	int len = my_strlen(arr);//自定义函数求字符串长度
}

int main()
{
	char arr[] = "abcdef";//字符串
	reverse_string(arr);//定义的函数
	return 0;
}

4.实现反向排列

在这里插入图片描述

代码如下(示例):

#include<stdio.h>
int my_strlen(char* arr)
{
	int count = 0;//计数器
	while (*arr != '\0')//如果这个元素不等于结束标志,进入循环
	{
		count++;//计数器自增1
		arr++;//找到下一个需要对比的元素
	}
	printf("字符串的长度是:%d\n", count);
	return count;
}

//返回类型  函数名     函数体
void reverse_string(char *arr)
{
	int len = my_strlen(arr);//自定义函数求字符串长度
	int left = 0;
	int right = len - 1;
	while (right > left)
	{
		//交换两个元素
		char tmp = *(arr+left);
		*(arr + left) = *(arr+right);
		*(arr + right) = tmp;
		left++;
		right--;
	}
}

int main()
{
	char arr[] = "abcdef";//字符串
	reverse_string(arr);//定义的函数
	printf("%s", arr);
	return 0;
}

运行效果:
在这里插入图片描述


5.递归实现反向排列

递归的两个必要条件
1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。
2.每次递归调用之后越来越接近这个限制条件

在这里插入图片描述

void reverse_string(char* arr)
{
	int len = my_strlen(arr);//自定义函数求字符串长度
	char tmp = *arr;
	*arr = *(arr + len - 1);
	*(arr + len - 1) = tmp;

	reverse_string(arr + 1);//递归从下一个元素开始

}

在这里插入图片描述

void reverse_string(char* arr)
{
	int len = my_strlen(arr);//自定义函数求字符串长度
	char tmp = *arr;
	*arr = *(arr + len - 1);
	*(arr + len - 1) = '\0';

	reverse_string(arr + 1);

	*(arr + len - 1) = tmp;


}

完整代码:

#include<stdio.h>
int my_strlen(char* arr)
{
	int count = 0;//计数器
	while (*arr != '\0')//如果这个元素不等于结束标志,进入循环
	{
		count++;//计数器自增1
		arr++;//找到下一个需要对比的元素
	}
	printf("字符串的长度是:%d\n", count);
	return count;
}

//返回类型  函数名     函数体
void reverse_string(char* arr)
{
	int len = my_strlen(arr);//自定义函数求字符串长度
	char tmp = *arr;
	*arr = *(arr + len - 1);
	*(arr + len - 1) = '\0';
	if(my_strlen(arr+1)>=2)
		reverse_string(arr + 1);

	*(arr + len - 1) = tmp;


}

int main()
{
	char arr[] = "abcdef";//字符串
	reverse_string(arr);//定义的函数
	printf("%s", arr);
	return 0;
}

效果展示:
在这里插入图片描述


总结

在本篇博客中,我们讨论了如何使用递归的方式来实现字符串的逆序。通过不使用库函数,我们需要仅仅使用递归来实现这一功能。

首先,我们讨论了递归的基本概念和原理,指出了使用递归的条件:问题可以被分解为较小的子问题,并且每个子问题可以通过调用相同的函数来解决。然后,我们通过编写一个递归函数来实现字符串的逆序。

在实现递归函数时,,我们使用递归的方式,将字符串的第一个字符与最后一个字符进行交换,从而实现字符串的逆序。我们将交换后的字符串作为一个新的问题传递给递归函数,直到递归到边界条件,逆序的字符串最后返回。

最后,我们给出了逆序字符串的示例代码,并通过测试验证了递归函数的正确性。

通过本篇博客的学习,我们深入理解了递归的原理和应用,掌握了使用递归函数来实现字符串逆序的方法。递归函数的实现过程相对简单,但需要注意边界条件的处理和递归调用的方式。

举报

相关推荐

0 条评论