递归实现 参数字符串中的字符反向排列
2015-11-09 19:54
267 查看
编写一个函数reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
如果原字符串是"abcdef",将它用递归的方式翻转成"fedcba";
则原数组内存的是 "abcdef\0"
调用函数:先将字符a保存起来,将f换到a的位置,再将原f的位置置为"\0"
调用函数:指针向前走一个位置,传给函数的参数字符串变为"bcde\0"
再将字符b保存起来,将e换到b的位置,再将原e的位置置为"\0"
调用函数:指针向前再走一个位置,传给函数的参数字符串变为"cd\0"
再将字符c保存起来,将d换到c的位置,再将原d的位置置为"\0"
字符串变为"d\0";
然后 ,
退出一次函数调用,将保存起来的c放到"\0"的位置,参数字符串变为"dc\0"
退出一次函数调用,再将保存起来的b放到"\0"的位置,参数字符串变为"edcb\0"
退出一次函数调用,再将保存起来的a放到"\0"的位置,参数字符串变为"fedcba\0"
字符串由长变短再变长
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
如果原字符串是"abcdef",将它用递归的方式翻转成"fedcba";
则原数组内存的是 "abcdef\0"
调用函数:先将字符a保存起来,将f换到a的位置,再将原f的位置置为"\0"
调用函数:指针向前走一个位置,传给函数的参数字符串变为"bcde\0"
再将字符b保存起来,将e换到b的位置,再将原e的位置置为"\0"
调用函数:指针向前再走一个位置,传给函数的参数字符串变为"cd\0"
再将字符c保存起来,将d换到c的位置,再将原d的位置置为"\0"
字符串变为"d\0";
然后 ,
退出一次函数调用,将保存起来的c放到"\0"的位置,参数字符串变为"dc\0"
退出一次函数调用,再将保存起来的b放到"\0"的位置,参数字符串变为"edcb\0"
退出一次函数调用,再将保存起来的a放到"\0"的位置,参数字符串变为"fedcba\0"
字符串由长变短再变长
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> char reverse_string(char * string) { assert(string); int len = strlen(string) - 1; char tmp; if (len > 0) { // 指针形式 tmp = *string; *string = *(string + len); *(string + len) = '\0'; reverse_string(string + 1); *(string + len) = tmp; // 数组下标形式 /*tmp = string[0]; string[0] = string[len]; string[len] = '\0'; reverse_string(string + 1); string[len] = tmp;*/ } return string; } int main() { char arr[] = {0}; scanf("%s", arr); printf("原字符串是:> %s\n",arr); reverse_string(arr); printf("翻转后的字符串是:>%s\n",arr ); system("pause"); return 0; }
相关文章推荐
- jq+js 实现星星打分功能!
- jq+js 实现星星打分功能!
- 从头认识java-7.5 怎样通过继承扩展接口?
- OC数组冒泡排序
- wait_queue_head_t 使用
- 线段树2-Mayor's posters-POJ 2528
- Mongoose数据库学习总结
- 《leetCode》:Multiply Strings
- 小记2015-11-9
- NOJ 5538 c语言
- 零长度数组解析
- 面向业务的立体化高可用架构设计
- 文本挖掘之文本推荐(子集合生成)
- Linux进程间通信——使用命名管道
- hadoop源码学习(一)--configuration类详解
- 自己实现LinkedListJAVA103-104
- android 进度条设置显示格式
- Oracle数据库中插入日期型数据
- NOJ 5533 c语言
- codeforce 4D Mysterious Present 简单思路 动态规划