C語言三種方法實現字串左旋
阿新 • • 發佈:2019-02-05
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> void Left_Spin(char arr[], int len, int k) { assert(arr); assert(len > 0); int i = 0; int temp = 0; temp = arr[0]; int n = 0; for (n = 0; n < k; n++) { for (i = 0; i < len; i++) { arr[i] = arr[i + 1]; } arr[len-1] = temp; } } int main() { int num = 0; char array[] = "abcdef"; int len = strlen(array); printf("Please Enter number:"); scanf("%d", &num); printf("Before:%s\n", array); Left_Spin(array,len,num); printf("After:%s\n", array); system("pause"); return 0; }
//方法二:把字串分成兩部分, //一部分為:從字串的開始-左旋的次數-1位置的字串。 //另一部分為:左旋的次數-1位置的字串到結尾的位的位置 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> void Swap(char *x, char *y) { *x ^= *y; *y ^= *x; *x ^= *y; } void Left_Spin(char arr[], int len, int k) { assert(arr); assert(len > 0); char *start = arr; char *middle = arr + (k - 1); char *end = arr + len - 1; while (start < middle) { Swap(start, middle); start++; middle--; } start = arr; middle = arr + (k - 1); while (middle + 1 < end) { Swap(middle + 1, end); middle++; end--; } end = arr + len - 1; while (start < end) { Swap(start, end); start++; end--; } } int main() { int num = 0; char array[] = "abcdef"; int len = strlen(array); printf("Please enter number:\n"); scanf("%d", &num); num %= len; printf("Before:%s\n", array); Left_Spin(array, len, num); printf("After:%s", array); system("pause"); return 0; }
//方法三:進行開闢雙倍字串空間 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> void Left_Spin(char arr[], int len, int k) { assert(arr); assert(len > 0); char *Buff=NULL; char *start_Buff = Buff; Buff = (char*)malloc(2 * len+1); strcpy(Buff, arr); strcat(Buff, arr); strncpy(arr, Buff + k,len); } int main() { int num = 0; char array[] = "abcdef"; int len = strlen(array); printf("Please enter number:\n"); scanf("%d", &num); num %= len; printf("Before:%s\n", array); Left_Spin(array, len, num); printf("After:%s", array); system("pause"); return 0; }