实现一个函数,可以左右旋字符串中的k个字符
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符的到CDAB
ABCD右旋一个字符得到DABC
ABCD右旋两个字符的到CDAB
左旋:首先我们可以把第一元素放在一个临时变量中,然后将其他元素往前移动,然后把最后一个位置放入临时变量的值,这样我们我们就实现一个元素的左旋,重复这样的步骤,我们就可以得到左旋k次的字符串。
右旋:首先我们可以把第最后一个元素放在一个临时变量中,然后将其他元素往后移动,然后把第一个位置放入临时变量的值,这样我们我们就实现一个元素的右旋,重复这样的步骤,我们就可以得到右旋k次的字符串。
原理我们了解后我们来看下代码
1. #include<stdio.h> 2. #include<string.h>//运用strlen()函数指针要引用头文件#include<string.h> 3. void string_left_rotate(char* str,int k) 4. { 5. int i=0; 6. int n=strlen(str);//求字符串中的字符个数 7. for(i=0;i<k;i++) 8. { 9. //每旋转一个字符 10. char temp=*str;//临时变量 11. //后面的元素往前挪动 12. for(int j=0;j<n-1;j++) 13. { 14. *(str+j)=*(str+j+1);//后一个元素赋值给前一元素 15. } 16. *(str+n-1)=temp;//将临时变量赋值给最后一个元素 17. } 18. } 19. void string_right_rotate(char* str,int k) 20. { 21. int i=0; 22. int n=strlen(str);//求字符串中的字符个数 23. for(i=0;i<k;i++) 24. { 25. char temp=*(str+n-1); 26. for(int j=n-1;j>0;j--) 27. { 28. *(str+j)=*(str+j-1);//后一个元素被赋值给前一元素 29. } 30. *str=temp;//将临时变量赋值给第一个元素 31. } 32. } 33. int main() 34. { 35. char arr[10]="ABCDEF"; 36. char brr[10]="ABCDEF"; 37. int k=3;//左右旋的次数 38. string_left_rotate(arr,k); 39. string_right_rotate(brr,k); 40. printf("%s\n",arr); 41. printf("%s\n",brr); 42. return 0; 43. }
代码里有一些注释帮助大家理解。
相关的问题:
给出一个字符串brr[]看它是否是这个字符串arr[]经过左旋得到的,如果是,就给出经过多少次左旋得到的
其实我们可以在左旋的基础上,加一个比较的函数,函数库里面strcmp()就能帮助我们去实现比较的问题,了解原理之后,我们来看下代码
1. #include<stdio.h> 2. #include<string.h>//使用strcmp()函数,需要引用#include<string.h> 3. void string_left_rotate(char* str,int k) 4. { 5. int i=0; 6. int n=strlen(str); 7. for(i=0;i<k;i++) 8. { 9. //每旋转一个字符 10. char temp=*str; 11. //后面的元素往前挪动 12. for(int j=0;j<n-1;j++) 13. { 14. *(str+j)=*(str+j+1); 15. } 16. *(str+n-1)=temp; 17. } 18. } 19. int main() 20. { 21. char arr[10]="ABCDEF"; 22. char brr[10]="ABCDEF"; 23. int k=strlen(arr);//求出字符串中字符的个数 24. while(k) 25. { 26. char arr[10]="ABCDEF"; 27. string_left_rotate(arr,k); 28. printf("%s\n",arr);//更清楚了解左旋了多少次 29. if(strcmp(arr,brr)==0) 30. { 31. printf("arr左旋%d次得到brr\n",k); 32. break;//如果我们找到了,我们就可以跳出循环,减少循环次数 33. } 34. k--; 35. } 36. if(k==0) 37. { 38. printf("arr左旋得不到brr\n"); 39. } 40. return 0; 41. }
看完之后希望大家能够完全掌握,也欢迎大家指出其中的不足,谢谢大家