递归方式实现字符串逆序,不使用库函数strlen()。

将获得的字符串逆序,总体思路为:

1.首元素取出,尾元素放到首元素位置。

2.将 '\0' 元素前移一位。

3.递归中间剩余元素。

例如,存在一个字符串 "abcdefg'\0'",先将a元素取出,将g元素前置,变为 "gbcdef '\0'",此时将'\0' 前移一位,占用g之前的位置,然后对中间剩余字符进行递归,执行以上步骤,直到中间剩余的元素小于等于1个。

不使用库函数的思路很简单,可以自己写一个获取字符串长度的函数来代替库函数strlen()。

整体代码如下:

#include<stdio.h>
#include<string.h>

int my_strlen(char * arr)       //递归求字符串长度
{
	int count = 0;
	while (*arr != '\0')        //循环直到字符串末尾找到 '\0'
	{
		count++;                //计数器
		arr++;
	}
	return count;
}

void reverse(char* arr)        //字符串逆序,要求整个数组逆序,而不是逆序打印
{
	char tmp = 0;
	int len = 0;
	tmp = *arr;            //先取出第一个元素
	len = my_strlen(arr);     //求字符串的长度
	*arr = *(arr + len - 1);  //将最后一个元素放到第一位
	*(arr + len - 1) = '\0';  //将最后一个元素改为 '\0'
	if (my_strlen(arr + 1) > 1)  //开始递归,判断条件是中间剩余的字符串小于等于1
		reverse(arr + 1);    //递归(每次递归都会执行上面的东西!也就是每次都会将
							 //最后一个元素放到第一位 然后最后一位改成 '\0',
	                         //直到不满足循环条件)

	*(arr + len -1) = tmp;     //将开头取出的第一个元素放到最后
}

int main()                  //主函数
{
	char arr[8] = { "abcdefg" };
	reverse(arr);
	printf("%s", arr);
}


这里还有一种方法是不考虑末尾的  \0 ,直接获取最左边元素位置(0)和
最右边元素位置(strlen(arr)-1),直接将这两个元素调换位置,然后递归中间的剩余元素,
递归和判断方法与这里的方法一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值