实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
//方法一:
将第一个元素存起来,依次将后面的元素前移一个位置,最后将第一个元素移到最后一个元素位置处。
void left_move1(char ch[], int n, int len)
{
while (n--)
{
int i = 0;
char tmp = ch[0];
for (i = 0; i < len - 1; i++)
{
ch[i] = ch[i + 1];
}
ch[len - 1] = tmp;
}
}
方法二:
如果左旋k个,那么将前k个字符逆序,再将后面的字符逆序,最后将逆序后的字符串整个逆序,
即可达到左旋k的目的,
void left_move2(char* left, char* right)
{
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
主函数如下:
int main()
{
char ch[] = "abcdef";
int n = 0;
scanf("%d", &n);
int len = strlen(ch);
n = n % len;
//left_move1(ch, n, len);
left_move2(ch, ch + n - 1);
left_move2(ch + n, ch + len - 1);
left_move2(ch, ch + len - 1);
printf("%s\n", ch);
return 0;
}