C语言实现字符串翻转(递归)

文章介绍了两种使用递归在C语言中反转字符串的方法。方法一依赖于自定义的strlen函数,通过指针移动和临时变量实现;方法二则通过传入字符串的起始和结束下标,交换元素位置来达到逆序效果。这两种方法都利用了递归的思想。
摘要由CSDN通过智能技术生成

方法一

思路:

这里举例字符串为abcdefg

// strlen函数,实现
int myStrlen(char arr[]) {
	if (*arr != '\0'){
		arr++;
		return 1+ myStrlen(arr);
	}
		return 0;
 }
// 使用指针变量来接收实参(arr数组名)
void reverse(char* arr) {
// 首先我们通过自己实现的myStrlen()函数计算字符出的字符个数
	int len = myStrlen(arr);
	int temp = *arr; // 1. 把a放在临时变量中
	*arr = *(arr + len - 1); // 2.把f 放在a中(将字符串中最后一个元素放到首元素中)
	*(arr + len - 1) = '\0'; //  3  \0放到f上 (‘\0’往前移)
	//核心:当代码执行到这里时对中间字符串进行处理,指针向后移动
	//只要字符串元素大于等于两个,重复上面代码,调用函数本身(递归)
	if (myStrlen(arr + 1) >= 2)  // 4.bcde逆序 
		reverse(arr+1);// 每次指针移动我们传入的地址也要对应
	// 当中间所有字符串全都反转完毕结束
	*(arr + len - 1) = temp;  //  5 把a放在\0上 
	
}
int main() {
//  创建一个字符数组
	char arr[] = "abcdefg";
	// 将数组名作为参数传递到我们自定义的反转字符串(递归)函数中
	reverse(arr);
	printf("逆序后的字符串为:%s", arr);
	return 0;
}

分析示意图:

在这里插入图片描述

方法二(较简单)

思路

可以传入字符串的两个特殊位置的下标方便实现

//使用递归完成字符串逆序 abcdef
void reverse(char* arr,int left,int right){
// 交换两个元素的实现
	
		//在left小于right前提下递归调用
		if (left < right){
			int temp;
			temp = arr[left];
			arr[left] = arr[right];
			arr[right] = temp;
			reverse(arr, left+1, right-1);// 两个下标会越来越接近
}
}
int main() {
	char str[] = "abcdefg";
	int right = strlen(str);
	// 传递函数实参(数组名即第一个元素的首地址,元素的初索引,和末索引)
	reverse(str,0,right-1);
	// 打印实现结果
	printf("%s", str);
	return 0;
}

分析示意图

在这里插入图片描述
今日分享结束:若有不足可指出!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值