C语言编程 递归方法与非递归方法 实现将参数字符串中的字符反向排列
//题目要求要求:不能使用C函数库中的字符串操作函数
(否则本题也没什么意义了啊)
<1>非递归方法
此方法基本思想是设立两个指针,分别指向字符串的头尾
并且依次交换所指向的数据,代码中为left和right
源代码:
#include<stdio.h>#include<stdlib.h>#include<string.h>//因为要使用strlen()语句void reverse_string(char str[]){ int temp; char *left = str; char *right = str + strlen(str) - 1; while (*left <* right) { temp = *left; *left = *right; *right = temp; *right--; *left++; }}int main(){ char str[] = "chooseyou"; printf("%s\n", str); reverse_string(str); printf("%s", str); system("pause"); return 0;}
<2>递归方法
递归方法思想如下图
类似于非递归的left与right指针所指数据互换
递归时只订立一个指针,每一次通过未交换字符串的长度(len)来表示所指向的元素的字符串倒数除\0外第一个元素。
每一次的递归将指针所指的元素储存进一个变量,并且将倒数第一个元素(除\0外),与所知元素换再把最后元素置为\0,然后改变len进行下次递归。
最后的效果是字符串由长变短再变长得以完成反向排列
详解如图
源代码:
#include<stdio.h>#include<stdlib.h>void reverse_string(char *str){ int len = strlen(str); char temp=*str;//当前所指元素 *str = *(str + len - 1);//除\0外最后一个元素 *(str + len - 1) = '\0';//置\0 if (strlen(str + 1) >= 2)//长度小于等于1则不需要交换 { reverse_string(str + 1); } *(str + len - 1) = temp;//将储存的元素反序序放回字符串完成反向排序}int main(){ char str[] = "chooseyou"; printf("%s\n", str); reverse_string(str); printf("%s\n", str); system("pause"); return 0;}
注意:要修改的字符串要以数组类型存储(str[]),*str储存为只读类型,强行写值会出错
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。