Bootstrap

字符串逆序——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

最终完成整个递归过程

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;