将一个长度为n的字符串向左循环移动m位

// 将一个长度为n的字符串向左循环移动m位,如:hello,world向左移动3位就变成了lo,worldhel
// 思路:把字符串切成长为m和n-m的两半,先分别对两部分进行逆序,最后对整个字符串逆序。

#include <iostream>
using namespace std;


void ReverseString(char * const str, const int count);

void RotateLeft(char *str, int num);

int _tmain(int argc, char *argv[])
{
	char str[] = "hello,world";

	RotateLeft(str, 3);
	
	cout << str << endl;

	getchar();
	return 0;
}

void ReverseString(char * const str, const int count)
{
	if (str == NULL || count < 2)
	{
		return;
	}

	char *start = str;
	char *end = str + count - 1;
	char tmp;

	while (end > start)
	{
		tmp = *end;
		*end = *start;
		*start = tmp;

		start++;
		end--;
	}
}

void RotateLeft(char *str, int num)
{
	if (str == NULL || num < 1)
	{
		return;
	}
	
	int length = (int)strlen(str);

	num = (num + length) % length;

	char *left = str;
	char *right = str + num;

	ReverseString(left, num);
	ReverseString(right, length - num);
	ReverseString(str, length);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值