若要实现字符串的逆序输出操作,可以有两种方法实现:
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:第四步不可直接放在第三步后面。