<编程之法>1.1 字符串旋转

本文介绍了一种高效的字符串操作方法——三步反转法,用于实现字符串的左旋转,并提供了一个单词翻转的例子。通过实际代码展示了如何将这种方法应用于字符串的处理中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

给定一个字符串,左旋转m个字符,输出旋转后的字符串。

例如  “abcdef” 左旋转3个字符后成为 “defabc”


解决办法:三步反转

将“abcdef”看成两部分  X=“abc”  Y=“def”  先对X反转,再对Y反转,然后整体反转。

代码:

void reverseString(char *s, int bg, int ed)
{
	while (bg < ed)
	{
		char tmp = s[bg];
		s[bg++] = s[ed];
		s[ed--] = tmp;
	}
}

void leftLotateString(char *s, int n, int m)
{
	reverseString(s, 0, m - 1);
	reverseString(s, m, n - 1);
	reverseString(s, 0, n - 1);
}


单词翻转:

输入一个英文句子,将句子中的单词翻转。例如: 输入“I am a student.”   输出 “student. a am I”


解决办法:先将每个单词反转,然后将整个句子反转。

void reverseWord(char *s)
{
	char *bg = s, *ed=s,*p = s;
	while (*p != '\0')
	{
		if (*p == ' ')
		{
			ed = p - 1;
			while (bg < ed)
			{
				char t = *bg;
				*bg++ = *ed;
				*ed-- = t;
			}
			bg = p + 1;
		}
		++p;
	}
	ed = p - 1;
	while (bg < ed)
	{
		char t = *bg;
		*bg++ = *ed;
		*ed-- = t;
	}
	reverseString(s, 0, strlen(s)-1);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值