实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA
思路:先将一个字符串左移一位,可以使用一层for循环来实现, 然后每次都可以调用这层循环,调用移位的次数,还有就是,
循环次数如果大于字符串的长度,会重复执行一些无用的 操作,所以给step模上字符串的长度,就可以产生一个小于 字符串长度的数字。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
void str_shift(char *str,int len, int step)
{
int i = 0;
int j = 0;
char tmp = 0;
step %= len;//step为0到(len - 1)的一个数字,提高了移位时的效率
assert(str);
assert(len > 1);
for (j = 0; j < step; j++)//外层循环实现左移step位
{
tmp = str[0];
for (i = 0; i < len - 1; i++)//内层循环实现了左移一次
{
str[i] = str[i+1];
}
str[i] = tmp;
}
}
int main()
{
char msg[] = "ABCD1234";
int k = 0;
printf("Please Enter:>");
scanf("%d",&k);
printf("before : %s\n",msg);
str_shift(msg,strlen(msg), k);
printf("shift_after : %s\n",msg);
system("pause");
return 0;
}