/* 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; }