/*
题目名称:
字符串左旋
实现一个函数,可以左旋字符串中的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;
}
正文完