【C语言】字符串右循环移位
2015-06-13 13:24
441 查看
比如:“abcdefghi”循环右移2位就是:“hiabcdefg”
给定函数原型:void RightLoopMove(char *pStr,unsigned short steps)
方法一:首先将最后面一个字符赋给临时变量,再将前面字符依次往后挪动一个位置,最后把临时变量赋给第一个字符。
#include <stdio.h> #include <string.h> void RightLoopMove(char *pStr, unsigned short steps) { char *l = pStr; char *r = pStr + strlen(pStr) - 1; while (steps) { char tmp = *r; char *p = r; while (p > l) { *p = *(p - 1); p--; } *l = tmp; steps--; } } int main() { char a[] = "abcdefghi"; RightLoopMove(a,2); printf("%s\n", a); return 0; }
方法二:三次翻转字符串
#include <stdio.h> #include <string.h> void reverse(char *l, char *r) { while (l < r) { char tmp = *l; *l = *r; *r = tmp; l++; r--; } } void RightLoopMove(char *pStr, unsigned short steps) { int n = strlen(pStr); reverse(pStr, pStr+n-steps-1); reverse(pStr + n - steps,pStr+n-1); reverse(pStr,pStr+n-1); } int main() { char a[] = "abcdefghi"; RightLoopMove(a,2); printf("%s\n", a); return 0; }
相关文章推荐
- 关于.h文件和.cpp文件
- C#给C++传参的兼容问题
- Effective C++ 条款37解读:绝不重新定义继承而来的缺省参数值(2012年某公司笔试试题)
- leetcode 日经贴,Cpp code -Invert Binary Tree
- C# 调用C++链接库与回调
- C语言的左位移能不能超过8位?
- C++标准库中sstream与strstream的区别详细解析
- (2)风色从零单排《C++ Primer》 一个简单的书店程序
- LIS 最长上升子序列问题 nlgn时间打印其中一个序列
- 在c++程序中调用被c编译器编译后的函数为什么要加extern “C”
- 《C/C++工程师综合练习卷》
- 《C/C++工程师综合练习卷》
- c++的运算符及其优先级
- bit-map简介及其C/C++代码实现
- C++STL中vector容器的用法
- NYOJ 58 最少步数(DFS)
- 一起talk C栗子吧(第十三回:C语言实例--单链表二)
- NYOJ 58 最少步数(BFS)
- xcorr 自相关 c++实现
- C++ delete失败