/* 题目名称: 字符串左旋 实现一个函数,可以左旋字符串中的k个字符。 例如 : ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB */ #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> //方法一 void LeftMove1(char* a, int k) { int n = strlen(a); int i = 0, j = 0; for (i = 0; i < k; i++) { char t = *a; for (j = 0; j < n - 1; j++) { *(a + j) = *(a + j + 1); } *(a + n - 1) = t; } } void Reverse(char* left, char* right) //翻转 { while (left < right) { char t = *left; *left = *right; *right = t; left++; right--; } } //方法二 void LeftMove2(char* a, int k) //三步翻转法 { int n = strlen(a); //字符串:FGHIJ 左旋2个元素 Reverse(a, a + k - 1); //左边翻转 FG -> GF Reverse(a + k, a + n - 1); //右边翻转 HIJ -> JIH Reverse(a, a + n - 1); //整体翻转 GFJIH -> HIJFG } int main() { char arr1[] = "ABCDE"; char arr2[] = "FGHIJ"; char arr3[] = "KLMNO"; int k = 2; LeftMove1(arr1, k); printf("%s\n", arr1); LeftMove2(arr2, k); //三步翻转法 printf("%s\n", arr2); return 0; }
下一个:jpa 原生SQL写法