实现一个函数,可以左旋字符串中的k个字符。
代码实现如下
#include<stdio.h> #include<string.h> void left_revolve(char ch[], int k) { int len = strlen(ch); k %= len; int i = 0; //4.根据k值,重复123操作 for (i = 0; i < k; i++) { //1.创建临时变量存储首字符 char tmp = ch[0]; int j = 0; //2.字符串整体向前移动一个字符的大小 for (j = 0; j < len - 1; j++) { ch[j] = ch[j + 1]; } //3.将首字符存放到字符串末尾 ch[len - 1] = tmp; } } int main() { char ch[] = "abcdef"; int k = 0; printf("请输入需要旋转字符的个数>"); scanf("%d", &k); left_revolve(ch, k); printf("%s\n", ch); return 0; }
既然可以将前k个字符左旋之后置于字符串末尾,那么也可以得到-> 先将前k个字符倒序,再将剩余字符倒叙,最后再将前后两部分倒序
代码实现如下
#include<stdio.h> #include<assert.h> #include<string.h> void reverse(char* left, char* right) { assert(left && right); while (left < right) { char tmp = *right; *right = *left; *left = tmp; left++; right--; } } void left_revolve(char ch[], int k) { int len = strlen(ch); k %= len; //1.先逆序前k个字符 reverse(ch, ch + k - 1); //2.再逆序剩余的字符 reverse(ch + k, ch + len - 1); //3.最后逆序整个字符串 reverse(ch, ch + len - 1); } int main() { char ch[] = "abcdef"; int k = 0; printf("请输入需要旋转字符的个数>"); scanf("%d", &k); left_revolve(ch, k); printf("%s\n", ch); return 0; }