实现一个函数,可以左旋字符串中的k个字符。

代码实现如下

#include<stdio.h>
#include<string.h>
void left_revolve(char ch[], int k)
{
	int len = strlen(ch);
	k %= len;
	int i = 0;
	//4.根据k值,重复123操作
	for (i = 0; i < k; i++)
	{
		//1.创建临时变量存储首字符
		char tmp = ch[0];
		int j = 0;
		//2.字符串整体向前移动一个字符的大小
		for (j = 0; j < len - 1; j++)
		{
			ch[j] = ch[j + 1];
		}
		//3.将首字符存放到字符串末尾
		ch[len - 1] = tmp;
	}
}
int main()
{
	char ch[] = "abcdef";
	int k = 0;
	printf("请输入需要旋转字符的个数>");
	scanf("%d", &k);
	left_revolve(ch, k);
	printf("%s\n", ch);
	return 0;
}

既然可以将前k个字符左旋之后置于字符串末尾,那么也可以得到->
先将前k个字符倒序,再将剩余字符倒叙,最后再将前后两部分倒序


代码实现如下

#include<stdio.h>
#include<assert.h>
#include<string.h>
void reverse(char* left, char* right)
{
	assert(left && right);
	while (left < right)
	{
		char tmp = *right;
		*right = *left;
		*left = tmp;
		left++;
		right--;
	}
}
void left_revolve(char ch[], int k)
{
	int len = strlen(ch);
	k %= len;
	//1.先逆序前k个字符
	reverse(ch, ch + k - 1);
	//2.再逆序剩余的字符
	reverse(ch + k, ch + len - 1);
	//3.最后逆序整个字符串
	reverse(ch, ch + len - 1);
}
int main()
{
	char ch[] = "abcdef";
	int k = 0;
	printf("请输入需要旋转字符的个数>");
	scanf("%d", &k);
	left_revolve(ch, k);
	printf("%s\n", ch);
	return 0;
}

更多推荐

字符串左旋