如:ABCDE左旋一位是BCDEA;左旋两位是CDEAB。
方法一:循环左移法。
先将第一次字符拿出,然后将后面的字符依次向左移1位,刚好最后一个字符空出,把第一个字符放入,当然这里面考虑到这个字符串的长度,多次操作可以用移的步数和字符串的个数取%来计算。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
void left_str(char str[], int len, int steps)
{assert(str);assert(len > 0);steps %= len;while (steps-- > 0){char tmp = str[0];int i = 0;for (; i < len; i++){str[i - 1] = str[i];}str[i - 1] = tmp;}
}
int main()
{char msg[] = "abcde";left_str(msg, strlen(msg), 1);printf("%s\n", msg);system("pause");return 0;
}

方法二,.字符串的逆序,把一个字符串分成两部分,然后分别对两个字串进行逆序,最后整体逆序。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
void reveese_str(char*start,char*end)
{assert(start);assert(end);while (start < end){*start ^= *end;*end ^= *start;*start ^= *end;start++, end--;}
}
void left_str(char msg[], int len, int steps)
{assert(msg);assert(len>0);steps %= len;reveese_str(msg, msg + steps - 1);//第一部分逆序;reveese_str(msg+steps, msg+len-1);//第二部分逆序;reveese_str(msg , msg + len - 1);//整体逆序;
}
int main()
{char msg[] = "abcd1234";left_str( msg,strlen(msg),2);printf("%s\n", msg);system("pause");return 0;
}
方法三:双倍字符串。

创建一个新的字符串,将以前的字符串拷贝。这种方法虽然高效,但需要开辟新内存,所以最后将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
int is_left_str(char str[], int len, int steps)//abcabc
{assert(str);assert(len > 0);steps %= len;int new_len = 2 * len + 1;char*new_str = (char*)malloc(new_len);//分配的内存,strcpy(new_str, str);strcat(new_str, str);strncpy(str, new_str + steps, len);free(new_str);//释放内存;
}
int main()
{char msg[] = "abcd1234";is_left_str(msg, strlen(msg), 1);printf("%s\n", msg);system("pause");return 0;
}

C语言之——左旋字符串相关推荐

  1. C语言题目:左旋字符串.

    C语言题目:左旋字符串 两种方法: 方法一原理:把第一个元素放存放到某个变量,让除了第一个的元素全部向前移动一个索引,再把变量放到数组最后一个元素 实现: 方法二原理: 先让要左旋的那几个字符逆序,再 ...

  2. 左旋字符串(c语言)

    题目1:实现一个函数,可以左旋字符串中的k个字符. 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 法一:暴力解法,以abcdef变成bcdefa为例,写循环把a存到tmp ...

  3. 【C语言】实现一个函数,可以左旋字符串中的K个字符

    题目说明: 要求实现一个函数,可以左旋字符串中的K个字符: 其中: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 解法一: 解题思路: 拿到一组字符串之后,我们首先设置一个临时变 ...

  4. c语言字符串前加l,【C】 30_C语言中的字符串

    字符串的概念 字符串是有序字符的集合 字符串是程序中的基本元素之一 C 语言中没有字符串的概念 C 语言中通过特殊的字符数组模拟字符串 C 语言中的字符串是以 '\0' 结尾的字符数组 字符串与字符数 ...

  5. Swift语言指南(十)--字符串与字符

    原文:Swift语言指南(十)--字符串与字符 字符串是一段字符的有序集合,如"hellow,world"或"信天翁".Swift 中的字符串由 String ...

  6. go语言编程之字符串操作

    2019独角兽企业重金招聘Python工程师标准>>> http://www.beckbi.cn/?p=288 go语言编程之字符串操作 转载于:https://my.oschina ...

  7. Swift3.0语言教程分割字符串与截取字符串

    Swift3.0语言教程分割字符串与截取字符串 Swift3.0语言教程分割字符串 如果想要快速的创建一个数组,我们可以将字符串进行分割,分割后的内容将会生成一个数组.在NSString中有两个分割字 ...

  8. Swift3.0语言教程组合字符串

    Swift3.0语言教程组合字符串 Swift3.0语言教程组合字符串,当开发者想要将已经存在的字符串进行组合,形成一个新的字符串,可以使用NSString中的两个方法,分别为appending(_: ...

  9. Swift3.0语言教程获取字符串编码与哈希地址

    Swift3.0语言教程获取字符串编码与哈希地址 Swift3.0语言教程获取字符串编码与哈希地址,以下将讲解字符串中其它内容的获取方法. 1.获取字符串编码 在NSString中可以使用2个属性获取 ...

最新文章

  1. 【网络】HTTP基础总结
  2. 图解C++虚函数 虚函数表
  3. Linux 关闭与重启
  4. python双等号怎么输入_python中的星号‘*’和双星号‘**’的解说
  5. Mysql储存过程2:变量定义与参数传递
  6. html 图片防盗链,配置.htaccess文件实现图片防盗链
  7. python语法_算数运算+赋值运算符+比较运算符+逻辑运算符
  8. 【UIKit】UITableView.06
  9. 基于C语言EOF与getchar()的使用详解
  10. java取multipart_spring的multipartResolver和java后端获取的MultipartHttpServletRequest方法对比...
  11. javascript示例代码
  12. 2012-11-21nbsp;09:30nbsp;NSStr…
  13. MyQQ project
  14. 解答腾讯会议的常见新手问题
  15. 【Unity】射击小游戏
  16. PLM与ERP的区别
  17. 摸鱼还要提醒?用Python整个倒计时界面自觉摸鱼~
  18. 定量分析双花(双重支付)问题
  19. 解决:id you register the component correctly? For recursive components, make sure to provide the “name
  20. 性能测试:Loadrunner 脚本录制、设置事务、添加检查点、参数化以及添加关联

热门文章

  1. 广义相对论-学习记录16-第七章-史瓦西解与粒子运动1
  2. 【Android】多功能二维码实现思路,自动连接WI-FI
  3. Microsoft Visual Studio 的下载与安装
  4. 热电偶测温电路Multisim仿真及故障字典建立
  5. C练题笔记之:Leetcode-654. 最大二叉树
  6. php如何将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串!编辑
  7. 基于asp.net高考志愿填报参考信息管理系统#毕业设计
  8. 【中危】启用了不安全的TLS1.0、TLS1.1协议
  9. Python中end作用
  10. AES加密与解密(秘钥)