按顺序改变字符串的位置,例如“abcdef”,旋转2位,变成“cdefab”,旋转3位,变成“defabc”
就是把前n位按顺序取出来,后面的元素前移,再将取出的元素放在数组的后面
第一种,常规思路,第二种方法蛮有意思的
例如“abcdef”旋转2位,我先把前两位逆序变成“bacdef”,然后再把后四位逆序,变成“bafedc”,最后再全部逆序,变成“cdefab”
#include <stdio.h> #include <string.h> void left_1(char a[], int n) { int len = strlen(a); char k = 0; int i = 0, j = 0; for (i = 0; i < n; i++) { k = a[0]; for (j = 0; j < len - 1; j++)//len-1=5 { a[j] = a[j + 1]; } a[len-1] = k; } } void exchange(char* left, char* right) { char k = 0; while (left < right) { k = *left; *left = *right; *right = k; left++; right--; } } void left_2(char a[], int n) { int len = strlen(a); exchange(a, a + n - 1);//逆序前n项 exchange(a+n, a + len - 1);//逆序后len-n项 exchange(a, a + len - 1);//逆序全部n项 } int main() { char a[] = "abcdef"; int n = 0; printf("请输入要旋转的位数"); scanf("%d", &n); //left_1(a,n);//基本思路是取出第一个元素,然后其他元素再依次前移,最后将取出的第一个元素放最后 left_2(a, n);//这种思路是先把前n项逆序,然后再把后面的逆序,最后再全部逆序 printf("%s\n", a); return 0; }
新手,轻喷,写来以后复习用