[C语言]两种方法实现逆序字符串(递归/非递归)

        实现字符串的逆序并不是将字符串逆序打印,而是将字符串"abcdef"逆序成为"fedcba"。

目录

1.非递归实现逆序字符串

2.递归实现逆序字符串


1.非递归实现逆序字符串

int Strlen(char* str)//计算字符串长度,也可以直接调用头文件为<string.h>中strlen函数
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

void reverse(char* str)//逆序字符串,分别从字符串两端开始互换
{
	int len = Strlen(str);
	int left = 0;        //为字符串的首端
	int right = len-1;//为字符串的末端,-1是因为下标从0开始

	while (left < right)
	{
		char tmp = *(str + left);
		*(str + left) = *(str + right);
		*(str + right) = tmp;
		left++;
		right--;
	}

}

int main()
{
	char str[] = "abcdef";

	reverse(str);

	printf("%s", str);
	return 0;
}

2.递归实现逆序字符串

int myStrlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		str++;
		count++;
	}
	return count;
}

void reverse(char* str)
{
	int len = myStrlen(str);//获取字符串长度
	char tmp = *str;        //得到字符串的首端元素
	*str = *(str + len - 1);//首端元素被替换成末端的元素
	*(str + len - 1) = '\0';//末端元素被替换成‘\0’,进行字符串的缩短。
	if (myStrlen(str + 1) >= 2)//str+1是进行到字符串的第二个元素
                               //因为末尾的f已经被替换成了'\0'
	{                          //所以此时字符串为bcde\0
		reverse(str + 1);      //下一次就是对b和e的互换
	}
	
	*(str + len -1) = tmp;再将上一次f被换成'\0'后再换成a实现最终的互换

}
int main()
{
	char str[] = "abcdef";
	reverse(str);
	printf("%s", str);
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值