2.实现一个函数,可以左旋字符串中的k个字符。
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
#define _CRT_SECURE_NO_WARNINGS 1
//2.实现一个函数,可以左旋字符串中的k个字符。
//AABCD左旋一个字符得到ABCDA
//AABCD左旋两个字符得到BCDAA
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void revolve_left(char str[], int k)
{
assert(str);
int len = strlen(str);
char tmp = 0;
if (k < len)
{
for (int i = 0; i < k; i++)
{
tmp = str[0];
for (int j = 0; j < len - 1; j++)
{
str[j] = str[j + 1];
}
str[len - 1] = tmp;
}
}
else
{
exit(1);
}
}
int main()
{
char str[] = "AABCD";
int k = 0;
printf("输入你所需要旋转的字符个数:");
scanf("%d", &k);
revolve_left(str,k);
printf("%s\n", str);
system("pause");
return 0;
}
//还可以用反转,三步反转法,效率更高。
//第一步先把你要反转的是k个字符反转,
//第二步实现后面的字符反转,
//最后实现全部字符再反转一下就好了。
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void reverse(char * left, char *right)
{
while (left < right)//实现反转字符的程序
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
void revolve_left(char str[], int k)
{
int len = strlen(str);
reverse(str, str + k - 1);//反转你要的k个字符
reverse(str + k, str + len - 1);//反转k之后的部分字符
reverse(str,str+len-1);//全部字符的反转。
}
int main()
{
char str[] = "AABCD";
int k = 0;
printf("输入你所需要旋转的字符个数:");
scanf("%d", &k);
revolve_left(str,k);
printf("%s\n", str);
system("pause");
return 0;
}