2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > C语言——逆序输出字符串的函数实现

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

时间:2022-06-29 10:44:01

相关推荐

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<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;}

代码讲解:在字符串逆置函数reverse——string中,

第一步,将数组第一个元素a放到临时变量中。

第二步,将最后一个元素g放在首元素中。

第三步,将结束符放到最后一个元素位置。

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

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

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。