26 左旋转操作:把字符串前面的若干个字符移动到尾部

来源:互联网 发布:淘宝违禁词查询工具 编辑:程序博客网 时间:2024/05/17 01:12
/*26.左旋转字符串题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串 abcdef左旋转 2位得到字符串 cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为 O(n),辅助内存为 O(1)。*/#include<iostream>#include<stdio.h>#include<string.h>using namespace std;char* leftShift(char *str,int n){char *p=str+n;int i,len=strlen(str);while(*p!='\0')p++;i=0;while(i++<n)*p++=*str++;*p='\0';return p-len;} char* leftShift2(char *str,int n){char p[100];int i,k,len=strlen(str);for(i=n,k=0;i<len;i++,k++)//左移n位,实际是到坐标n-1为止,新的从n开始 p[k]=str[i];for(i=0;i<n;i++,k++)//剩下的n位, p[k]=str[i]; return p;} int main(){char str1[]={"abcdef"};char str2[]={"aaabbcedfkk"};char str3[]={"abcdef"};int num=3;printf("%s左移%d位为:",str1,num);printf("%s\n",leftShift(str1,num));num=5;printf("%s左移%d位为:",str2,num);printf("%s\n",leftShift(str2,num));num=2;printf("%s左移%d位为:",str3,num);printf("%s\n",leftShift2(str3,num));return 0;}

0 0
原创粉丝点击