C语言——逆序输出字符串的函数实现

        若要实现字符串的逆序输出操作,可以有两种方法实现:

                                1.函数迭代法        2.函数递归法。

一.函数迭代法

代码如下:

int my_strlen(char* str)//自定义函数计算数组大小
{
	int count = 0;
	while(*str!='\0')//strlen是计算'\0'之前的字符,所以不让指针等于'\0'字符即可
	{ 
		count++;
		str++;
	}
	return count;
}
void print(char arr[])
{
	int i = 0;
	int sz = my_strlen(arr);
	for (i = 0; i < sz; i++)
	{
		printf("%c", arr[i]);//打印数组内容
	}
}
void reverse_string(char arr[])//逆置数组内容
{
	int left = 0;
	int right = my_strlen(arr)-1;
	while (left < right)
	{
		int tmp = 0;
		tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++; 
		right--;
	}
}
int main()
{
	int count = 0;
	char arr[] = "abcdefghijklmnopqrstuvwxyz";
	reverse_string(arr);
	print(arr);
	return 0;
}

        讲解:1.这里我是自己模拟实现的strlen函数,没有用到库函数strlen,大家觉得麻烦的话直接使用strlen函数,引上头文件#include即可。

                    2.函数打印也是,自己模拟实现的,简单化可以直接printf("%s\n",arr);

                逆序字符串函数的实现原理:是通过一次次的循环遍历进行首尾字符的互换输出。


二.函数递归法

思路:1.先将首元素与末尾元素进行交换(第一步)——创建临时变量,将a元素提取放在临时变量中,将元素g拿出来放到之前a元素的位置,将元素a放到数组末尾(原元素g)的位置,完成第一轮的交换(首尾交换)。


           2. 之后要将结束符'\0'放在最后一个元素中,进行剩余元素的起始交换,即继续进行"bcdef"的交换(从第二各元素的地址(arr+1开始),而b再和f进行交换.....最后形成gfedcba) 。

代码如下:

//方法二.函数递归法
int my_strlen(char* str)//自定义函数计算数组大小
{
	int count = 0;
	while (*str != '\0')//strlen是计算'\0'之前的字符,所以不让指针等于'\0'字符即可
	{
		count++;
		str++;
	}
	return count;
}


void reverse_string(char arr[])
{
	int len = my_strlen(arr);			//计算字符数组的长度大小
	char tmp = arr[0];					//第一步,将数组第一个元素a放到临时变量中
	arr[0] = arr[len - 1];				//第二步,将最后一个元素g放在首元素中
	arr[len - 1] = '\0';				//第三步,将结束符放到最后一个元素位置
	if (my_strlen(arr + 1)>= 2)			//递归限制条件:若数组第二个元素后的数组个数大于等于2,则继续进行交换;若剩余数组个数为1 ,或者没有了,便结束递归!
		reverse_string(arr + 1);		//继续执行剩余数组元素的交换
										//注:if语句为函数递归的限制条件,若函数达到限制条件,则跳出递归,不再
										循环调用函数。这里有7个元素,两两交换后只剩余元素d,而元素d不能再和其他
										元素进行交换,便停止调用,跳出递归。
	arr[len - 1] = tmp;					//第四步,将元素a放到数组末尾(原元素g)的位置,完成第一轮的交换
										//注2:第四步不可直接放在第三步后面
}

int main()
{
	char arr[] = "abcdefg";
	int len = my_strlen(arr);
	reverse_string(arr);
	printf("%s\n", arr);
	return 0;
}

        代码讲解:在字符串逆置函数reverse——string中,
        第一步,将数组第一个元素a放到临时变量中。
        第二步,将最后一个元素g放在首元素中。
        第三步,将结束符放到最后一个元素位置。


    if (my_strlen(arr + 1)>= 2)  递归限制条件:若数组第二个元素后的数组个数大于等于2,则继续进行交换;若剩余数组个数为1 ,或者没有了,便结束递归!


    reverse_string(arr + 1); 继续执行剩余数组元素的交换。


注:if语句为函数递归的限制条件,若函数达到限制条件,则跳出递归,不再循环调用函数。这里有7个元素,两两交换后只剩余元素d,而元素d不能再和其他元素进行交换,便停止调用,跳出递归。


        第四步,将元素a放到数组末尾(原元素g)的位置,完成第一轮的交换。


        注2:第四步不可直接放在第三步后面。

                 

你可能感兴趣的:(C语言知识点,c语言,算法)