实现一个函数,可以左旋字符串中的k个字符
2015-11-04 11:44
435 查看
实现一个函数,可以左旋字符串中的k个字符。AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAA1、可以通过字符串互换,每左旋一次,字符串第一个移到最后一个,其余字符整体向前移动一位。代码如下:
代码如下:
#include<stdio.h> #include<string.h> #include<stdlib.h> void reverse(char *str,int len,int k) { int i; while(k--) {//左旋几次,整个字符串调整几次 char tep=str[0];//第一个元素和最后一个元素互换 for(i=0;i<len-1;i++) { str[i]=str[i+1]; } str[len-1]=tep; } } int main() { char arr[10]={0}; int len,k; gets(arr); scanf("%d",&k); len=strlen(arr); k=k%len;//如果左旋次数大于字符串长度出现重复,所以要k需要模len reverse(arr,len,k); printf("%s\n",arr); system("pause"); return 0; }2、上述方法效率较低。也可以把整个字符串看成两部分,然后逆置,在整体进行逆置就可以实现左旋k个字符。
代码如下:
#include<stdio.h> #include<string.h> #include<assert.h> #include<stdlib.h> void revolve(char *left,char *right) { while(left<right)//进行逆序排列 { char temp=*left; *left=*right; *right=temp; left++; right--; } } void left_move(char *str,int len,int k) { assert(str);//指针有效性判断 revolve(str,str+k-1);//逆序需要左旋的部分 revolve(str+k,str+len-1);//逆序其余字符 revolve(str,str+len-1);//逆序整个字符串 } int main() { char arr[10]={0}; int len,k; gets(arr); scanf("%d",&k); len=strlen(arr); k=k%len;//如果左旋次数大于字符串长度出现重复,所以要k需要模len left_move(arr,len,k); printf("%s\n",arr); system("pause"); return 0; }
相关文章推荐
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- PowerShell函数简明教程
- 探索PowerShell(十一)函数介绍