左旋字符串
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
ABCD左旋三个字符得到DABC
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void leftRotate(char* a, int n)
{
int k = 0;
printf("输入k:\n");
scanf("%d", &k);
k %= n; //提高效率
while (k--)
{
int index = 0;
char tmp = a[index];
while (a[index + 1] != '\0')
{
a[index] = a[index + 1];
++index;
}
a[index] = tmp;
}
}
int main()
{
char str[] = "ABCD";
int len = strlen(str);
leftRotate(str, len);
printf("%s\n", str);
return 0;
}
运行结果:
右旋字符串
ABCD右旋一个字符得到DABC
ABCD右旋两个字符得到CDAB
ABCD右旋三个字符得到BCDA
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void reverse(char* str, int left, int right)
{
while (left < right)
{
char tmp = str[left];
str[left] = str[right];
str[right] = tmp;
left++;
right--;
}
}
int main()
{
int k = 0;
char str[] = "ABCD";
int len = strlen(str);
while (1)
{
printf("右旋k位,输入k:\n");
scanf("%d", &k);
if (k < 0 || k > len)
{
printf("输入错误,请重新输入\n");
continue;
}
break;
}
reverse(str, 0, len - 1);
reverse(str, 0, k - 1);
reverse(str, k, len-1);
printf("%s\n", str);
return 0;
}
运行结果: