字符串左旋
实现一个函数,可以左旋字符串中的k个字符
例如:
ABCDEFG左旋一个字符得到BCDEFGA
ABCDEFG左旋两个字符得到CDEFGAB
法一:穷举法
#include <stdio.h>
#include <assert.h>
void string_rotation1(char* str, int k) {
assert(str);
int i = 0;
int n = strlen(str);
for (i = 0; i < k; i++) {
//每次旋转一个字符
char temp = *str;
int j = 0;
//后面n-1个字符向前移动
for (j = 0; j < n - 1; j++) {
*(str + j) = *(str + j + 1);
}
//将temp放在最后
*(str + n - 1) = temp;
}
}
int main() {
char arr[] = "ABCDEFG";
int k = 2;
string_rotation1(arr,k);
printf("%s\n", arr);
return 0;
}
运行结果:
法二:三步反转法
#include <stdio.h>
#include <assert.h>
//三步反转发
void reverse(char* left, char* right) {
assert(left);
assert(right);
while (left < right) {
char temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
}
void string_rotation2(char* str, int k) {
int n = strlen(str);
reverse(str, str + k-1);
reverse(str + k, str + n-1);
reverse(str, str + n-1);
}
int main() {
char arr[] = "ABCDEFG";
int k = 2;
string_rotation2(arr,k);
printf("%s\n", arr);
return 0;
}
运行结果: