【练习题】编写一个函数,把一个char组成的字符串循环右移n位
2015-06-23 23:21
423 查看
例如:原来是”abcdefghi”,如果n = 2,移位后应该是”hiabcdefg”。
思路:当读到这个题目的时候,没有编写过类似程序的人可能会想,程序的实现就是依照字符的循环右移这样实现的,但仔细想会发现这样很难实现,不妨换一种思路,我们先把需要移到前面的字符取出来放进一个新的字符数组,接着再把前面的没有移动的部分插到新字符数组的尾部,加上字符串结束标志‘\0’,这样就形成了一个符合要求的新的字符数组,把它输出来就可以了.
解析:本题提供了两种方法。
思路:当读到这个题目的时候,没有编写过类似程序的人可能会想,程序的实现就是依照字符的循环右移这样实现的,但仔细想会发现这样很难实现,不妨换一种思路,我们先把需要移到前面的字符取出来放进一个新的字符数组,接着再把前面的没有移动的部分插到新字符数组的尾部,加上字符串结束标志‘\0’,这样就形成了一个符合要求的新的字符数组,把它输出来就可以了.
解析:本题提供了两种方法。
#include <stdio.h> #include <string.h> #define MAX_LEN 1024 void LoopMove_1(char *pStr, int steps) { int len = strlen(pStr) - steps; char temp[MAX_LEN]; strcpy(temp, pStr + len); strcpy(temp + steps, pStr); *(temp + steps + len) = '\0'; strcpy(pStr, temp); } void LoopMove_2(char *pStr, int steps) { int len = strlen(pStr) - steps; char temp[MAX_LEN]; memcpy(temp, pStr + len, steps); memcpy(temp + steps, pStr, len); memcpy(pStr, temp, len + steps); } int main(void) { char str1[] = "abcdefghi"; LoopMove_1(str1, 3); printf("%s\n", str1); char str2[] = "gklmnopqrst"; LoopMove_2(str2, 3); printf("%s\n", str2); return 0; }
相关文章推荐
- Android基础教程(一)--Android工程目录结构
- Linux TC(Traffic Control) 简介(一)
- Linux常用命令
- 黑马程序员--汉诺塔问题的递归求解C语言
- 既然阿里不能跟美团“在一起”,至少还有“口碑”一条街
- 【一些事晚报】Uber刷单调查:量级达百万
- MyEclipse无法部署项目
- dell灵越14TD-5628特别版安装OS X Yosemite 10.10.3 (14D131) 懒人版流程备忘
- MyEclipse无法部署项目
- 一起学编程(5--流程)
- MySQL计划任务(事件调度器)(Event Scheduler)[转]
- Java中的Checked Exception——美丽世界中潜藏的恶魔?
- 数据结构和算法经典100题-第19题
- The currently displayed page contains invalid values.
- 自己写的BackgroundPanel(面板中添加背景图片的方法)
- 自有音频格式构建
- OC语言学习1
- javascript简单时间轴
- The currently displayed page contains invalid values.
- thinkphp模版调用函数方法