问题重述:实现一个
函数,可以左旋字符串k个字符。例如:
abcdef左旋2得到cdefab
方法一:暴力旋转法
#include<stdio.h> #include<string.h> void left_remove(char *arr,int n) { int i=0; int j=0; char ch=0; int len=strlen(arr); for(i=0;i<n;i++) //左旋的个数 { ch=arr[0]; //保存第一个字符 for(j=0;j<len-1;j++) { arr[j]=arr[j+1]; } arr[len-1]=ch; } } int main() { char arr[]="abcdef"; //abcdef-->bcdefa-->cdefab int n=0; scanf("%d",&n); left_remove(arr,n); printf("%s\n",arr); return 0; }
方法一:三步旋转法
初始状态:
a | b | c | d | e | f |
第一步:翻转a,b
b | a | c | d | e | f |
b | a | f | e | d | c |
c | d | e | f | a | b |
#include<stdio.h> #include<string.h> void change(char *left,char *right) { int temp=0; while(left<right) { temp=*left; *left=*right; *right=temp; left++; right--; } } void left_remove(char *p,int n) { //abcdef int len=strlen(p); change(p,p+n-1); //bacdef change(p+n,p+len-1); //bafedc change(p,p+len-1); //cdefab } int main() { char arr[]="abcdef"; int n=0; scanf("%d",&n); left_remove(arr,n); printf("%s\n",arr); return 0; }