字符串循环移位
来源:互联网 发布:java中replaceall 编辑:程序博客网 时间:2024/05/16 07:20
请实现字符串右循环移位函数,比如:”abcdefgh”循环右移两位就是”ghabcdef”.
实现字符串循环移位可有多种方式:
- 老实方法:一个一个的移位,每次循环,先把最后一个保存起来,然后从后面开始往后挪一位。(如果移位K次,这个操作就进行K次循环)
图示内部移位一次流程:
代码如下:
void RightLoopMove(char *pStr, unsigned short k) { int len = strlen(pStr); assert((*pStr)&&(k)); short steps = k%len; for (size_t i = 0; i < steps; i++) { char tmp = pStr[len-1]; for (size_t j = len-1; j >0; j--) { pStr[j] = pStr[j-1]; } pStr[0] = tmp; }}int main(){ char msg[] = "abcdefghi"; RightLoopMove(msg, 2); printf("%s", msg); system("pause"); return 0;}
2.写一个翻转字符串函数
实现三次翻转; 观察字符串循环移位K次的结果,与字符串后K位翻转一次,前面的翻转一次,然后整体翻转后得到的结果相同。
图示如下:
代码如下:
void myHswap(char *pStr, int left, int right) //写一个翻转函数{ assert(*pStr); //判断合法性 while (left < right) { char tmp = pStr[right]; //交换左右数组字符,定义一个tmp,把最右边的值给tmp pStr[right] = pStr[left]; pStr[left] = tmp; left++; right--; }}void RightLoopMove(char *pStr, unsigned short K){ int len = strlen(pStr); int steps = K%len; assert(*pStr); myHswap(pStr, 0, len - steps - 1); //经过三次翻转得到所要的结果 myHswap(pStr, len-steps, len -1); myHswap(pStr, 0, len - 1);}int main(){ char msg[] = "abcdefghi"; RightLoopMove(msg,13 ); printf("%s", msg); system("pause"); return 0;}
阅读全文
0 0
- 字符串循环移位包含
- 读书笔记--字符串循环移位
- 字符串循环移位
- 字符串循环移位
- 字符串循环移位
- 字符串循环移位算法
- 字符串循环移位
- 字符串循环移位
- 字符串 --- 循环移位问题
- 字符串循环移位
- 字符串循环移位
- 字符串循环移位
- 字符串循环移位
- 字符串右循环移位
- 字符串右循环移位
- 字符串循环移位
- 字符串循环移位
- 字符串循环移位
- vbox虚拟机使用xshell
- vue 输入框 限定输入金额的范围并且用千分符显示,初始值有格式限制
- 写一个方法实现吧obj对象里的propertyName的属性值设置为value
- 实现水平垂直居中的五种方法
- 119. Pascal's Triangle II待续。。。
- 字符串循环移位
- L1-011. A-B
- 典型的字符串处理代码(algs4)
- FTP(vsftp)服务器的搭建配置以及访问控制
- 学以致用—股价月涨幅的计算
- 在Qtcreator下编译Nginx
- L1-012. 计算指数
- linux系统-延迟及定时任务与find命令的使用
- 【博弈+找规律】HDU_5963_朋友