字符串左旋右旋问题其实是同理的,下边以左旋为例:


方法一

思路:左旋一次就是将整个字符串向左移一个字符,第一个字符(arr[0])移动到最右侧。这样循环操作左旋次数就是最终左旋结果,如上图所示。

实现代码:

void LeftRotate1(char *arr,int count)
{assert(arr);int len = strlen(arr);//左旋count次while (count--){//从前往后移动之前先保存arr[0]char temp = arr[0];int i = 0;///左旋一次//将arr[1]到arr[len-1]往前移动while (i < len - 1){arr[i] = arr[i + 1];i++;}arr[len - 1] = temp;}
}

方法二:

思路:

先将前count个字符逆置,再将剩余字符逆置,最后整体逆置。如下图所示:

实现代码:

//逆置
void reverse(char *arr, int left, int right)
{while (left < right){char temp = arr[left];arr[left] = arr[right];arr[right] = temp;left++;right--;}
}void LeftRotate2(char *arr, int count)
{int len = strlen(arr);//逆置前count个字符reverse(arr, 0, count - 1);//逆置后len-count个字符reverse(arr, count, len - 1);//整体逆置reverse(arr, 0, len - 1);
}

方法三:

思路:将整个字符串拷贝一份,组成一个长度是原字符串二倍的新字符串,然后从第count向后取原字符串长度即可。如图所示:

实现代码:

void LeftRotate3(char *arr, int count)
{int len = strlen(arr);//扩容为原字符串长度二倍char *double_arr = (char *)malloc(sizeof(char)*(len * 2 + 1));//copy函数strcpy(double_arr, arr);//字符串连接strcat(double_arr, arr);int i = 0;从第count向后取原字符串长度for (i = 0; i < len; i++){arr[i] = double_arr[i + count];}free(double_arr);
}

字符串的左旋右旋问题(C语言实现,三种方法求解)相关推荐

  1. 字符串的左旋右旋问题

    字符串的左旋右旋其实是一个问题,下面只对右旋进行分析. 当一个字符串进行旋转的时候,字符串的大小会决定有效旋转次数.这里面的有效是指,后面的旋转会与前面的旋转相同,所以我们必须要对旋转次数进行去重. ...

  2. c语言编程非线性方程求解,c语言计算机编程三种方法求解非线性方程

    c语言计算机编程三种方法求解非线性方程 本 科 专 业 学 年 论 文题 目:非线性方程求解比较姓 名: 何 娟 专 业: 计算机科学技术系 班 级: 08 级本科(2)班 指 导 老 师: 刘 晓 ...

  3. c语言编程非线性方程求解,c语言计算机编程三种方法求解非线性方程.doc

    c语言计算机编程三种方法求解非线性方程.doc 本 科 专 业 学 年 论 文题 目非线性方程求解比较姓 名 何 娟 专 业 计算机科学技术系 班 级 08 级本科(2)班 指 导 老 师 刘 晓 娜 ...

  4. C语言中——三种方法判断是偶数还是奇数

    #include <stdio.h> int main(int argc, const char * argv[]) { int a; printf("请输入一个数:" ...

  5. avl树左旋右旋的理解

    一直没搞懂非平衡二叉树变平衡二叉树时左旋右旋,今天下定决心搞懂,然后在众多博客中终于找到了这样一篇,非常形象,记录如下: AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大 ...

  6. Java中用三种方法输出字符串_java中两个字符串连接的三种方法

    java中两个字符串连接有以下三种方法: 第一种方法:使用+: 第二种方法:使用concat(): 第三种方法:使用append(): 如下代码: public class Practice { // ...

  7. 字符串左旋右旋——三步旋转法和移相法

    题目:实现一个函数,可以左旋字符串中的k个字符. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 方法一:三步旋转法 左旋程序思路:首先根据画图得知左旋后的结果,然后在分析 ...

  8. 左旋右旋问题一次搞定!!!

    左旋右旋问题的解决 编程思想 1.在左右旋函数中实现该函数功能首先要想好如何存放移位后的字符元素 2.左旋时将字符串首元素赋给临时变量tmp而后将字符串元素依次前移一位 3.将tmp的值再赋给字符串的 ...

  9. 平衡二叉树的左旋右旋详解 看不懂你打我

    平衡二叉树的左旋右旋 看不懂你打我 左旋右旋的操作 为什么要左旋右旋 左旋右旋能保持排序二叉排序树的性质吗 下次写平衡二叉树的LL.RR.LR.RL. 左旋右旋的操作 1.左旋:对X节点左旋,即以X的 ...

最新文章

  1. 【ACM】杭电OJ 2063
  2. ECSHOP商品详情页”增加自定义TITLE
  3. MATLAB的左除\和右除/ ??? 自己没有完全明白
  4. Excel Oledb设置
  5. Python+selenium第一个自动化脚本
  6. 从招行数据架构调整,详解企业急需的数据中台与5大数字化转型
  7. python学习笔记-Day5
  8. python中堆排序_Python实现堆排序的方法详解
  9. [C++]##(两个井号)和#(一个井号)都是什么意思
  10. 斯坦福大学stanford
  11. java高并发编程讲解_有人看过 java高并发编程详解 汪文君著 这本书吗?
  12. 浅析信号与系统2(离散时间复指数序列的周期性质)
  13. 保利威视 获取回放API接口
  14. 2018年 10月份开始执行的最新税率表 2019年1月 小孩住房贷款等怎么扣
  15. 基金训练营学习笔记3-股票基金
  16. 【前端小实战】百度新闻雪碧图及动画(CSS sprites)
  17. MindMapper中的主题该怎样进行修改
  18. 【制作】基于金沙滩51单片机的电子密码锁程序
  19. 【转】内存不能为read/written 问题的简单解决办法
  20. MySQL中的随机抽取

热门文章

  1. 主板上集成显卡的计算机在进行显示,怎么查看自己电脑主板是否集成显卡
  2. BEGIN TRANSACTION
  3. Python数据清洗 预处理入门完整指南!
  4. 旧计算机硬盘驱动器可以进口吗,旧的硬盘驱动器安全吗? | MOS86
  5. Android高级工程师每日面试题精选,面试必备
  6. 怎么画龙的画奶奶帮我擦java,怎么一步一步教孩子用蜡笔简单画一条龙(步骤图解)...
  7. 互联网广告之功能讲解
  8. 由你定义吃鸡风格!CycleGAN,你的自定义风格转换大师[楚才国科]
  9. 制作动态logo教程
  10. 根据头像生成卡通头像要用什么技术