字符串逆序——C语言

c语言求字符串逆序结果的两种方法

1.利用函数调用

#include<stdio.h>
#include<string.h>
void reverse_string(char* arr)
{
	int left = 0;
	int right = strlen(arr) - 1;
	while (left < right)
	{
		char tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s\n", arr);
	return 0;
}

本质就是交换:连续进行交换左右对称位置的字符,所以运用到了while循环;而while循环的条件就是对称位置有可进行交换的字符:(1)left<right,继续进行交换;(2)left=right,是否交换不影响结果。当left>right时说明交换已经结束,则退出循环。

2.利用函数递归

#include<stdio.h>
#include<string.h>
void reverse_string(char* str)
{
	char tmp = *str;
	int len = strlen(str);
	*str = *(str + len - 1);
	*(str + len - 1) = '\0';
	if (strlen(str + 1) >= 2)
	{
		reverse_string(str + 1);
	}
	*(str + len - 1) = tmp;
}
int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s\n", arr);
	return 0;
}

基本原理:1.首先取出第一个字符串;2.将与其对称位置的字符串放在第一个字符串原有的位置上;3.将最后一位空余出来的位置放上\0;4.求剩下的字符串的逆序(字符串逐渐减少,问题逐渐简化,符合函数递归的思想)5.最后把a放到最后一个位置

体现在代码中:

1.第一步首先为第一个字符串开辟一个新的位置用于储存该字符串——char tmp=*str

2.进行交换:*str=*(str+len-1),str+len-1,就代表最后一个字符串的位置,len是利用strlen函数计算过的字符串的长度

3.将原来的最后一个字符串的位置上放上\0——*(str+len-1)='\0',方便继续求剩下的字符串的逆序,防止空位置干扰逆序过程的进行。

4.调用函数求剩下的字符串的逆序

5.把a放到字符串的最后的位置——*(str+len-1)=tmp

最终完成整个递归过程

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值