字符串左旋

编程知识 行业动态 更新时间:2024-06-13 00:20:06

实现一个函数,可以左旋字符串中的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;
}

更多推荐

字符串左旋

本文发布于:2023-03-29 10:58:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/5fe893e95eb2a57277917a1f8e073358.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   左旋

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!