1. 程式人生 > >字符串旋轉

字符串旋轉

logs pri arr abcd turn 是否 void sys color

  1 1.實現一個函數,可以左旋字符串中的k個字符。
  2 ABCD左旋一個字符得到BCDA
  3 ABCD左旋兩個字符得到CDAB
  4 2.判斷一個字符串是否為另外一個字符串旋轉之後的字符串。
  5 例如:給定s1 = AABCD和s2 = BCDAA,返回1,給定s1=abcd和s2=ACBD,返回0.
  6 AABCD左旋一個字符得到ABCDA
  7 AABCD左旋兩個字符得到BCDAA
  8 AABCD右旋一個字符得到DAABC
  9 1.
 10 1.
 11 1. #include <stdio.h>
 12 2. #include <windows.h>
 13
3. #include <assert.h> 14 4. void fun(char *arr, int n) 15 5. { 16 6. assert(arr); 17 7. assert(n); 18 8. int i=0; 19 9. int j=0; 20 10. char temp=0; 21 11. int len=strlen(arr); 22 12. for(i=0;i<n;i++) 23 13. { 24 14. temp=*arr; 25 15. for
(j=0;j<len-1;j++) 26 16. { 27 17. *(arr+j)=*(arr+j+1); 28 18. } 29 19. *(arr+len-1)=temp; 30 20. } 31 21. } 32 22. int main() 33 23. { 34 24. char arr[]="ABCD"; 35 25. int k=0; 36 26. printf("左旋轉幾個字符\n"); 37 27. scanf("%d",&k); 38
28. fun(arr,k); 39 29. printf("%s",arr); 40 30. system("pause"); 41 31. 42 32. } 43 2 44 #include <stdio.h> 45 #include <windows.h> 46 #include <assert.h> 47 void reverse(char *left,char *right) 48 { 49 assert(left); 50 assert(right); 51 while(left<right) 52 { 53 char temp=*left; 54 *left=*right; 55 *right=temp; 56 left++; 57 right--; 58 } 59 } 60 void fun(char *arr, int n) 61 { 62 assert(arr); 63 int len=strlen(arr); 64 reverse(arr,arr+n-1); 65 reverse(arr+n,arr+len-1); 66 reverse(arr,arr+len-1); 67 } 68 int main() 69 { 70 char arr[]="ABCD"; 71 int k=0; 72 printf("左旋轉幾個字符\n"); 73 scanf("%d",&k); 74 fun(arr,k); 75 printf("%s",arr); 76 system("pause"); 77 78 } 79 2.#include <stdio.h> 80 #include <windows.h> 81 #include <assert.h> 82 int is_move(char *s1, char *s2) 83 { 84 assert(s1); 85 assert(s2); 86 int len1=strlen(s1); 87 int len2=strlen(s2); 88 if(len1!=len2) 89 { 90 return 0; 91 } 92 else 93 { 94 strncat(s1,s2,len1); 95 if(strstr(s1,s2)) 96 { 97 return 1; 98 } 99 } 100 } 101 int main() 102 { 103 char arr[]="ABCDEF"; 104 if(is_move(arr,"CDEFAB")) 105 { 106 printf("ok!\n"); 107 } 108 else 109 { 110 printf("no!\n"); 111 } 112 system("pause"); 113 return 0;

字符串旋轉