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

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

例如:

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB

方法一

一、我们先假定这串字符为ABCDE,假设左旋1次,我们可以进行如下操作

ABCDE(一开始)

BBCDE(第一次:第一位赋值第二位的字符)

BCCDE(第二次:第二位赋值第三位的字符)

BCDDE(第三次:第三位赋值第四位的字符)

BCDEE(第四次:第四位赋值第五位的字符)

最后我们还差最后一个E换成A

BCDEA(第五次:=第五位赋值一开始字符第一位的字符)

代码如下:(记len为字符串长度)

ret=arr[0];
for (i = 0; i < len; i++)
		{
			if (4 == i)
			{
				arr[i] = ret;
//赋值一开始的第一位

			}
			if (i <= 3)
			{
				arr[i] = arr[i + 1];
//前一位赋值后一位

			}
		}

二、当左旋次数可随意改变时,我们可以用while循环来控制

使左旋次数=循环次数,记我们要左旋k个字符即循环k次

循环一次,k减一次1,当k一直减到0时,循环跳出

所以我们用while(k)  k=0时在C语言表示为假,跳出循环

代码如下:

#include<stdio.h>
char Left_hand(char* arr, int k)
{
	int right = 0;
	int i = 0;
	int len = strlen(arr);//求出字符串长度
	char ret;
	while (k)
	{
		ret = arr[0];
		for (i = 0; i < len; i++)
		{
			if (4 == i)
			{
				arr[i] = ret;
			}
			if (i <= 3)
			{
				arr[i] = arr[i + 1];
			}
		}
		k--;
		
	}
}
int main()
{
	char arr[] = "ABCDE";
	int k = 0;
	scanf("%d", &k);
		Left_hand(arr, k);
		printf("%s\n", arr);
		return 0;
	}

方法二

1.考虑挪动几次;

int time = k % len;

2.怎么挪动

for (int i = 0; i < time; i++)
{
	char tmp = src[0];
	int j = 0;
	for (j=0;j < len-1; j++)
	{
		src[j] = src[j + 1];

	}
	src[j] = tmp;
}

代码如下:

#include <string.h>
void left_round(char* src, int k)
{
	int len = strlen(src);
	int time = k % len;
	for (int i = 0; i < time; i++)
	{
		char tmp = src[0];
		int j = 0;
		for (j=0;j < len-1; j++)
		{
			src[j] = src[j + 1];

		}
		src[j] = tmp;
	}

}
int main()
{
	char str[] = "abcdefs";
	left_round(str, 3);
	printf("%s", str);
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值