左旋字符

字符串左旋 字符串左旋的三种解题方法。 阅读详情

问题描述:

 实现一个函数,可以左旋字符串中的k个字符。
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA

该问题有三种方法,现做一一分析

法一:通过移动字符实现左旋

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>

char *leftstring(char *str, int num,int len)
{
	char arr[10];
	char *p = str,*q = str;
	int i = 0;
	for (i = 0; i < num; i++)         //比如我们需要左旋两个字符串,那么先把原字符串的最前面的两个字符存起来
	{
		arr[i] = *p++;
	}
	p = str;
	p += num;                         //用p指向需要前移的第一个字符
	for (i = num; i < len-1; i++)   //从第一个字符开始依次把后面的字符前移,做前移操作,i控制次数
	{
		*str++ = *p++;
	}
	for (i = 0; i < num; i++)       //把刚刚取出来的字符,存到原字符串前移后的后面
	{
		*str++ = arr[i];
	}
	return q;
}

int main()
{
	char arr[] = "AABCD";
	int len = sizeof(arr) / sizeof(arr[0]);
	leftstring(arr, 2, len);
	printf("%s\n",arr);
	system("pause");
	return 0;
}

法二:通过置换函数进行左旋操作

比如abcd1234,如果我们想左旋四个,我们可以先把前面四个逆序得到dcba,接着把后面逆序得到4321,这样两次逆序后的结果是dcba4321,然后再整体逆序,得到了1234abcd,同样的方法大家可以试一下左旋两个是不是同样的效果

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<windows.h>

//通过置换函数进行左旋操作

void swap(char *p, char *q)     //置换两个字符
{
	assert(p);             //每次传入一个地址时进行断言,防止传址出错
	assert(q);
	*p ^= *q;
	*q ^= *p;
	*p ^= *q;
}

char *ReverseOrder(char *left, char *right)   //置换一组字符
{
	assert(left);
	assert(right);
	char *arr = left;
	while (arr < right)
	{
		swap(arr, right);
		arr++, right--;
	}
	return left;
}

char *leftstring(char *str, int num,int len)   //通过前后字符替换实现左旋
{
	assert(str);
	char *string = str;                       
	num = num % len;                          //加上一个取余的操作,目的是如果左旋的次数大于字符串的长度,比如该题如果是9,实际的结果只左旋了一次
	ReverseOrder(string, string + num - 1);          //先置换前一部分,再置换后一部分,然后整体置换
	ReverseOrder(string + num, string + len - 1);
	ReverseOrder(string, string + len - 1);
	
	return str;
}

int main()
{
	char arr[] = "abcd1234";
	int len = (sizeof(arr) / sizeof(arr[0])) - 1;
	leftstring(arr, 2, len);
	printf("%s\n",arr);
	system("pause");
	return 0;
}

法三:通过在拼接进行左旋,把和原字符串同样内容的字符串拼接在原字符串的后面

分析如下,如果我们的原字符串是abcd1234,现在我左旋2,想要得到的结果是cd1234ab,我使用本方法是在原字符串的后面拼接一整个,得到abcd1234abcd1234,然后从第三个字符开始把内容依次复制到原字符串中去,循环的次数是8.

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<windows.h>
#include<string.h>

//通过在拼接进行左旋,把和原字符串同样内容的字符串拼接在原字符串的后面

char *leftstring(char *str, int num, int len)
{
	assert(str);
	int i = 0;
	char *string = str;
	char *arr = (char *)malloc(2*len + 1);    //开辟空间使2*len+1,其中+1位为了给结尾处留有一个'\0'的空间
	num = num % len;
	strcpy(arr,string);
	strcat(arr,string);
	for (i = 0; i < len; i++)
	{
		*string++ = arr[i+num];
	}
	return str;
}

int main()
{
	char arr[] = "abcd1234";
	int len = (sizeof(arr) / sizeof(arr[0])) - 1;
	leftstring(arr, 2, len);
	printf("%s\n",arr);
	system("pause");
	return 0;
}



Seedance 2.5本地部署指南:AI生图与视频生成的完整实践 最近在AI生成内容领域,本地部署方案越来越受到开发者关注。特别是Seedance 2.5的发布,让很多原本依赖云端服务的用户开始转向本地化解决方案。本文将从实际使用角度出发,完整介绍Seedance 2.5的本地部署流程、功能特性对比以及实际应用技巧。 1. Seedance 2.5核心特性解析 1.1 什么是Seedance 2.5 Seedance 2.5是一款开源的AI生图和视频生成工具,支持在本地环境运行,无需联网即可实现高质量的图像和视频生成。相比之前的2.0版本,2.5在生成质量、运行效率和功能 阅读详情

相关推荐

NHANES更新数据后,权重计算方式也更新了

官网说明在此:如果你比我还懒,我下载了几个说明文件。2021年8月至2023年8月的总样本量与之前的2年周期相似。然而,。特别是,与之前包括过度抽样的周期相比,非西班牙裔白人的样本量较高,而非西班牙裔黑人的样本量较低。此外,60岁及以上人群的样本量较高,而年轻群体的样本量较低。子组的估计值可能具有较低的精确度,因此,检测组间差异的统计能力可能较低。此外,年龄和种族/西班牙裔亚组(尤其是儿童和青少年年龄组)的估计值可能会显示意想不到的模式。

珏世佳人的博客 2410

字符串左旋的三种方法

一.题目: 要求左旋一个字符串, 例如将ABCDEF 左旋两次后得到CDEFAB方法一: 1.思路:先把第一个元素拿出来,然后剩下的元素左移,最后把第一个元素放在最后的位置。 2.注意:k%=len, 代码如下: 方法二:逆序交换三次 1.思路:可以先将AB和CDE分别逆序得到BAEDC这个字符串,让后再将它们整体逆序得到CDEAB,即可得到结果。 代码如下: 方法三:用库函数strcpy,strncat 1.思路:假设,我们需要将字符串ABCDE左旋,我们可以首先在其后面再接一个ABCDE字符串, 即AB

qq_66518801的博客 1058

施耐德EcoStruxure平台深度体验:IEC 61499在智慧物流中心的真实应用案例解析

本文深度解析施耐德EcoStruxure平台在智慧物流中心的应用,重点探讨IEC 61499标准如何通过分布式控制和功能块技术重构自动化逻辑。通过上海某物流中心的真实案例,展示了该平台在提升系统弹性、降低停机成本方面的显著成效,为工业自动化转型提供实践参考。

weixin_30576827的博客 66

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

实现一个函数,可以左旋字符串中的k个字符例如:AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAA方法(1):采用循环移位,对需要旋转的k个字符按顺序进行旋转,先将要旋转的一个字符保存起来,将后面的往前挪动一位,再将保存起来的这个字符赋给最后一位,这样连续循环k次,就可以完成了。代码实现如下:#include<stdio.h> #include...

weixin_33812433的博客 172

OpenVox 8FXO板卡驱动安装记录

OpenVox A800P和A1200P的板卡驱动安装及问题解决方法

clliu的专栏 2463

Ollama运行DeepSeek大模型调优指南:GPU与CPU协同实现性能最大化

Ollama运行DeepSeek大模型调优指南

qq_32358423的博客 3997

将一个字符串左旋n个字符(两种方法)

左移字符串有多种方法,这里只介绍两种方法。方法一、一个字符一个字符的左移,先将第一个字符保存起来,然后将后面的每一个字符都向前移一个字符,‘\0’不移,要想移n个字符,就这样循环n次就好了。方法二、先将左移的前n个字符翻转,然后将剩余的一串字符翻转,最后将所有的字符再翻转一次,用三次翻转就可以将n个字符左移。这种方法比前一种方法效率要好一些。方法一的代码如下:#include...

weixin_34297300的博客 753

AI应用架构师总结:智能问答系统用户意图识别的8种方法与实践!

意图识别是智能问答系统的大脑入口,其技术水平决定了系统能否准确捕捉用户的核心诉求。本文系统剖析了从基础规则到前沿PLM的8种核心意图识别方法透明简单,冷启动快,维护成本高。中等规模场景基线,依赖特征工程。利用词义和局部/序列信息,训练成本高。当前最优精度,需大量资源。添加意图灵活,冷启动友好,精度可能略逊。提升鲁棒性,系统变复杂。解决歧义和自然交互的关键(多轮)。增强专业领域理解和推理能力。成功的意图识别模块需要:精准的意图定义(Schema)是前提!

AI云原生与云计算技术学院 1632

实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB

这个题的思路其实并不是很难理解,左旋字符串,可以先将第一个字符和最后一个字符交换,然后进行一个循环,就可以解决这个问题了;具体代码如下:#define _CRT_SECURE_NO_WARNINGS #include #include void levo(char *pstr, int SZ,int key) { assert(pstr != NULL); int i = 0; int j

weiaiyisheng_ljj的博客 914

保姆级教程:在RK3568 Debian系统上搞定AIC8800 WiFi与蓝牙驱动(含固件路径与开机自启脚本)

本文提供在RK3568 Debian系统上配置AIC8800 WiFi与蓝牙驱动的保姆级教程,涵盖驱动移植、固件部署、开机自启脚本等关键步骤。通过详细的硬件连接指南、内核配置示例和常见问题解决方案,帮助开发者快速实现无线模块的全功能配置,特别适合嵌入式Linux开发者参考。

weixin_28684825的博客 378

【ComfyUI 基础教程】ComfyUI 局部重绘工作流教程

本篇指南将带你了解 ComfyUI 中的局部重绘工作流,并带你完成一个局部重绘的示例,以及遮罩编辑器的使用等。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 303

左旋字符串

/*********************************************************************** 目的:实现一个函数,可以左旋字符串中的k个字符。例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 分析:假设一个字符串里要左旋2次: ▶ 第一种方法(暴力移位法): ▶ 第二种方法(三步翻转法): 平台:Visual studio 2017 && windows ****************************

DanceBit的博客 1136

YOLOv10改进策略【Neck】| arXiv 2025 分层多头注意力HMHA 子空间拆分提多样 + 通道重排降冗余,强化目标检测精度

HMHA(Hierarchical Multi-Head Attention,分层多头注意力)旨在解决传统多头注意力(MHA)在图像恢复任务中的核心缺陷——特征冗余。传统MHA将通道均匀拆分给各个头,导致不同头学习的子空间信息相似,进而出现多头关注同一区域、忽略退化区域修复的问题,限制了模型的特征表达能力。HMHA通过“分层子空间拆分+通道重排序”策略,让每个头学习差异化、互补的上下文特征,从根源上缓解冗余,提升图像恢复任务中对复杂退化场景的特征捕捉能力。

Limiiiing的博客 103

左旋转字符串

左旋转字符串难度简单字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。   示例 1: 输入: s = "abcdefg", k = 2 输出:"cdefgab" 示例 2: 输入:s = "lrloseumgh", k = 6 输出:...

开心就好 6235

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

> 1. 实现一个函数,可以左旋字符串中的k个字符。ABCD左旋一个字符得到BCDA ,ABCD左旋两个字符得到CDAB

实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法1: #include<stdio.h> /* > 1. 实现一个函数,可以左旋字符串中的k个字符。 > ABCD左旋一个字符得到BCDA > ABCD左旋两个字符得到CDAB */ void left(char* a,int valu...

weixin_44840572的博客 359

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

左旋字符串解析

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串尾部,请定义一个函数完成字符串左旋转操作的功能 输入:abcdef 2 输出:cdefab 输入:abcdef 3 输出:defabc 假设 abcdef 要左旋两位 得到 cdefad 首先可以想到的方法是: 1、把 a b 拿出来 2、然后将剩余字符依次放至字符串开头 3、把 a b 添加到字符串末尾 这种方式虽然可以很容易想到,但并不是最优的解决方案 优化左旋过程为如下方式: 1、根据要左旋的位数(2)将目标字符串 (abcde

小顾总的博客 3420

实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB

每次拿到首元素先保存下来,每一次循环使字符串元素全部向前面搬移,最后将首元素赋值给末尾元素,这样每次都可以完成一个字符的左旋,最后再用一个循环控制进行多少次左旋字符操作。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> /...

尐 328

字符串左旋问题

题目1 字符串左旋 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 思路分析 创建一个临时变量用来存放字符串的第一个字符,利用for循环遍历字符串,实现将后一位赋值给前一位,最后将第一个字符赋值给最后一个元素即可。 代码实现 //实现一个函数,可以左旋字符串中的k个字符。 void leftturn(char* str,int length,int k) { //循环实现 字符左旋 for (int i = 0; i < k

一朵花花 2412
上一篇: 宏函数
下一篇: 在一台电脑上使用两个github账号
NeilZhy
博客等级 码龄11年 175粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值