赞
踩
若要实现字符串的逆序输出操作,可以有两种方法实现:
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;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
讲解:1.这里我是自己模拟实现的strlen函数,没有用到库函数strlen,大家觉得麻烦的话直接使用strlen函数,引上头文件#include<string.h>即可。
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;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
代码讲解:在字符串逆置函数reverse——string中,
第一步,将数组第一个元素a放到临时变量中。
第二步,将最后一个元素g放在首元素中。
第三步,将结束符放到最后一个元素位置。
if (my_strlen(arr + 1)>= 2) 递归限制条件:若数组第二个元素后的数组个数大于等于2,则继续进行交换;若剩余数组个数为1 ,或者没有了,便结束递归!
reverse_string(arr + 1); 继续执行剩余数组元素的交换。
注:if语句为函数递归的限制条件,若函数达到限制条件,则跳出递归,不再循环调用函数。这里有7个元素,两两交换后只剩余元素d,而元素d不能再和其他元素进行交换,便停止调用,跳出递归。
第四步,将元素a放到数组末尾(原元素g)的位置,完成第一轮的交换。
注2:第四步不可直接放在第三步后面。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。