现在的位置: 主页 > 公司荣誉 > 文章列表

实现一个函数,可以左旋字符串中的k个字符

作者:沈阳市沈河区金瑞龙美术社 来源:www.jrlgg.com 发布时间:2017-09-13 13:25:43
 

实现一个函数,可以左旋字符串中的k个字符 实现一个函数,可以左旋字符串中的k个字符。

AABCD左旋一个字符得到ABCDA

AABCD左旋两个字符得到BCDAA

1、可以通过字符串互换,每左旋一次,字符串第一个移到最后一个,其余字符整体向前移动一位。

代码如下:

nclude<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; }

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:黄石网站制作 http://huangshi.666rj.com

  • 上一篇:数学之路-python计算实战(16)-机器视觉-滤波去噪(邻域
  • 下一篇:最后一页
  •