当前位置:   article > 正文

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

c语言字符串逆序输出函数

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

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

一.函数迭代法

代码如下:

  1. int my_strlen(char* str)//自定义函数计算数组大小
  2. {
  3. int count = 0;
  4. while(*str!='\0')//strlen是计算'\0'之前的字符,所以不让指针等于'\0'字符即可
  5. {
  6. count++;
  7. str++;
  8. }
  9. return count;
  10. }
  11. void print(char arr[])
  12. {
  13. int i = 0;
  14. int sz = my_strlen(arr);
  15. for (i = 0; i < sz; i++)
  16. {
  17. printf("%c", arr[i]);//打印数组内容
  18. }
  19. }
  20. void reverse_string(char arr[])//逆置数组内容
  21. {
  22. int left = 0;
  23. int right = my_strlen(arr)-1;
  24. while (left < right)
  25. {
  26. int tmp = 0;
  27. tmp = arr[left];
  28. arr[left] = arr[right];
  29. arr[right] = tmp;
  30. left++;
  31. right--;
  32. }
  33. }
  34. int main()
  35. {
  36. int count = 0;
  37. char arr[] = "abcdefghijklmnopqrstuvwxyz";
  38. reverse_string(arr);
  39. print(arr);
  40. return 0;
  41. }

        讲解: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) 。

代码如下:

  1. //方法二.函数递归法
  2. int my_strlen(char* str)//自定义函数计算数组大小
  3. {
  4. int count = 0;
  5. while (*str != '\0')//strlen是计算'\0'之前的字符,所以不让指针等于'\0'字符即可
  6. {
  7. count++;
  8. str++;
  9. }
  10. return count;
  11. }
  12. void reverse_string(char arr[])
  13. {
  14. int len = my_strlen(arr); //计算字符数组的长度大小
  15. char tmp = arr[0]; //第一步,将数组第一个元素a放到临时变量中
  16. arr[0] = arr[len - 1]; //第二步,将最后一个元素g放在首元素中
  17. arr[len - 1] = '\0'; //第三步,将结束符放到最后一个元素位置
  18. if (my_strlen(arr + 1)>= 2) //递归限制条件:若数组第二个元素后的数组个数大于等于2,则继续进行交换;若剩余数组个数为1 ,或者没有了,便结束递归!
  19. reverse_string(arr + 1); //继续执行剩余数组元素的交换
  20. //注:if语句为函数递归的限制条件,若函数达到限制条件,则跳出递归,不再
  21. 循环调用函数。这里有7个元素,两两交换后只剩余元素d,而元素d不能再和其他
  22. 元素进行交换,便停止调用,跳出递归。
  23. arr[len - 1] = tmp; //第四步,将元素a放到数组末尾(原元素g)的位置,完成第一轮的交换
  24. //注2:第四步不可直接放在第三步后面
  25. }
  26. int main()
  27. {
  28. char arr[] = "abcdefg";
  29. int len = my_strlen(arr);
  30. reverse_string(arr);
  31. printf("%s\n", arr);
  32. return 0;
  33. }

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


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


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


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


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


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

                 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/643660
推荐阅读
相关标签
  

闽ICP备14008679号