【C语言】左旋字符串(三种实现方式)
题目:
实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
方法一:
我们画个图分析一下:

基本逻辑:
就是我们每一次旋转之前,我们就取出 arr 数组的首元素存放在 tmp 中,然后将 arr 数组剩余的每一个元素都往前移动一位,最后我们再把 tmp 中的元素放回 arr 数组末尾的位置。
实现算法:
我们发现,abcd 4个字符旋转 k = 4 个字符时,数组就回到了本身数组 abcd 。这时,我们可以这样理解,虽然我们旋转了4个字符,但我们实际上我们旋转了0个字符;依次类推,旋转5个字符,实际上旋转了1个字符;接下去也是如此......接下来,我们再把字符长度加长,变成abcde 5个字符,旋转 k = 5 个字符时,数组就回到了本身数组 abcde,后面的分析就跟4个字符分析是一样的。然后,我们能够得到这样一个表达式 num(实际次数) = k % len(数组字符个数)。
代码实现:
#include <stdio.h>
#include <string.h>void Turn_left(char arr[],int k)
{int len = strlen(arr);//求得真实的旋转次数int num = k % len;for (int i = 0; i < num; i++){//每次移动一个char tmp = arr[0];int j = 0;for (j = 0; j < len - 1; j++){//移动数据arr[j] = arr[j + 1];}arr[j] = tmp;}
}
int main()
{char arr[] = "abcd";int k = 0;scanf("%d", &k);//输入旋转字符个数Turn_left(arr, k);printf("%s\n", arr);return 0;
}
运行结果:

方法二:
我们也可以画个图分析一下:

这里我们要用到两个函数:
strcpy() //字符串拷贝
strcpy(str1,str2)//将str2的元素拷贝到str2中strncat()//这也是字符串拷贝
strncat(tmp,arr,k)//把arr开始的元素 拷贝到tmp这个字符串的后面,拷贝k个
代码实现:
#include <stdio.h>
#include <string.h>void Turn_left(char arr[], int k)
{int len = strlen(arr);int num = k % len;char tmp[1000] = { 0 };//从arr + num的位置 开始拷贝字符串到tmp里面 strcpy(tmp, arr + num);//把arr开始的元素 拷贝到tmp这个字符串的后面,拷贝num个strncat(tmp, arr, num);//最后将tmp整个数组元素复制到arr数组中strcpy(arr, tmp);
}int main()
{char arr[] = "abcd";int k = 0;scanf("%d", &k);//输入旋转字符个数Turn_left(arr, k);//2printf("%s\n", arr);return 0;
}
运行结果:

方法三:
最后一种方式我们也画图分析一下:

代码实现:
#include <stdio.h>void Reverse(char arr[], int i, int j)
{while (i < j){char tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;i++;j--;}
}void Turn_left(char arr[], int k)
{int len = strlen(arr);int num = k % len;//将num位置前面的元素逆序Reverse(arr, 0, num - 1);//将num位置以及之后的元素逆序Reverse(arr, num, len - 1);//整个数组逆序Reverse(arr, 0, len - 1);
}int main()
{char arr[] = "abcd";int k = 0;scanf("%d", &k);//输入旋转字符个数Turn_left(arr, k);//2printf("%s\n", arr);return 0;
}
运行结果:

相关文章:
【C语言】左旋字符串(三种实现方式)
题目: 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法一: 我们画个图分析一下: 基本逻辑: 就是我们每一次旋转之前,我们就取出…...
数论补充 之 前后缀分解问题
文章目录 [0,i-1] 和 [i1,n-1] 共同作用3334,数组的最大因子得分 对于前缀分解问题,我愿把它分为几个大问题:[0,i] 或 [i,n-1] 或 [l,r],或 [0,i-1] 和 [i1,n-1] 共同作用的问题 [0,i-1] 和 [i1,n-1] 共同作用 3334,数组的最大因子得分 3334,数组的最大…...
IoTDB 集群节点 IP 改变,如何更新集群
问题 问题1:如果 IoTDB 配置的时候用的 IP,没有用 hostname,后面 IP 修改了,历史数据需要重新导吗? 问题2:如果现场运行 IoTDB 半年,电脑 IP 要改的话,半年的数据要导出来再导入么…...
【AI系列】从零开始学习大模型GPT (2)- Build a Large Language Model (From Scratch)
前序文章 【AI系列】从零开始学习大模型GPT (1)- Build a Large Language Model (From Scratch) Build a Large Language Model 背景第1章:理解大型语言模型第2章:处理文本数据第3章:编码Attention机制什么是Attention机制?Attention机制的基本原理数学表示应用总结为什么要…...
webshell通信流量分析
环境安装 Apatche2 php sudo apt install apache2 -y sudo apt install php libapache2-mod-php php-mysql -y echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php sudo ufw allow Apache Full 如果成功访问info.php,则环境安…...
数据可视化+SpringBoot+协同过滤推荐算法的美食点餐管理平台
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复的,希望帮助到更多的人。 背景分析 在当今数字化浪潮席卷全球的时代,餐饮行业也正经历着深刻的变革…...
DeepSeek 关联 Word 使用教程:解锁办公新效率
在当今数字化办公时代,将强大的人工智能模型与常用办公软件相结合,能显著提升工作效率。DeepSeek 作为一款先进的人工智能工具,若能与广泛使用的办公软件 Word 实现关联,可在文档撰写、编辑、内容优化等诸多方面为用户带来极大便利…...
[极客大挑战 2019]Havefun1
[极客大挑战 2019]Havefun1 代码审计发现 根据代码逻辑,要求传入’cat’参数,值为’dog’时执行if的操作,所以构造参数: ?catdog获得flag...
基于Swift实现仿IOS闹钟
仿 iOS 系统闹钟 添加闹钟效果图 收到通知效果图 更新日志 2018.09.12 由于 iOS 系统限制了注册本地推送的数量,最大的注册量为 64 条,且一旦超出 64 条,所有的推送都将失效,故而在添加推送的时候做了一个判断,超过…...
Threadlocal的实现原理
文章目录 ThreadLocal与Thread关系分析Threadlocal 不支持继承性lnheritableThreadLocal 类 ThreadLocal与Thread关系分析 由该图可知, Thread 类中有一个 threadLocals 和一个 inheritableThreadLocals , 它们 都是 ThreadLocalMap 类型 的变量 &#x…...
线程池处理异常
线程池在提交的任务在处理过程中发生了异常,却没有捕获到,导致异常只是输出在控制台,这通常需要把异常记录下来1、通过观察ThreadGroup的构造方法知道,当调用线程组的构造方法时,会获取当前线程所属的线程组࿰…...
RabbitMQ配置SSL证书
配置阿里云服务器RabbitMQ-SSL证书【windows】 文章目录 配置阿里云服务器RabbitMQ-SSL证书【windows】1. 证书下载2. 系统中添加证书(不知道是不是必要的)3. OpenSSL下载4. ca、server证书及私钥提取5. RabbitMQ-SSL证书配置6. 参考博客 1. 证书下载 进…...
.NET 9.0 的 Blazor Web App 项目,进度条 <progress> 组件使用注意事项
一、执行过程中,要刷新 进度条 的显示,需要 延时、释放,否则进度条不 实时 更新,最后一下到 100% // 延时,释放给前端:【必须】,否则进度条不 实时 更新,最后一下到 100await Task.D…...
第J7周:对于ResNeXt-50算法的思考
目录 FROM思考 FROM 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 📌你需要解决的疑问:这个代码是否有错?对错与否都请给出你的思考 📌打卡要求:…...
【第2章:神经网络基础与实现——2.3 多层感知机(MLP)的构建与调优技巧】
在当今科技飞速发展的时代,人工智能早已不是一个陌生的词汇,它已经渗透到我们生活的方方面面,从智能语音助手到自动驾驶汽车,从图像识别到自然语言处理。而支撑这一切的核心技术之一,就是神经网络。作为机器学习领域的璀璨明星,神经网络已经在众多任务中取得了令人瞩目的…...
【Elasticsearch】keyword分析器
Elasticsearch 中的keyword分析器是一种非常特殊的分析器,它的行为与其他常见的分析器(如standard、whitespace等)截然不同。keyword分析器的核心功能是将整个输入字符串作为一个单一的标记(token)返回,而不…...
重生之我在异世界学编程之C语言:深入预处理篇(上)目录)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、预处理的作用与流程…...
MySQL数据库误删恢复_mysql 数据 误删
2、BigLog日志相关 2.1、检查biglog状态是否开启 声明: 当前为mysql版本5.7 当前为mysql版本5.7****当前为mysql版本5.7 2.1.1、Navicat工具执行 SHOW VARIABLES LIKE LOG_BIN%;OFF 是未开启状态,如果不是ON 开启状态需要开启为ON。{默认情况下就是关闭状态} 2.…...
SpringAI集成DeepSeek实战
SpringAI集成DeepSeek实战教程 引言 Spring AI作为Spring生态系统中的新成员,为开发者提供了便捷的AI集成方案。本文将详细介绍如何在Spring项目中集成DeepSeek模型,实现智能对话等功能。 环境准备 在开始之前,请确保您的开发环境满足以下要…...
解决 THC/THC.h: No such file or directory 报错
报错现象: cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C In file included from /data/joyiot/liyong/codes/graspnet-baseline/knn/src/knn.h:5:0,from /data/joyiot/liyong/codes/graspnet-baseline/knn/s…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...
Qt/C++学习系列之列表使用记录
Qt/C学习系列之列表使用记录 前言列表的初始化界面初始化设置名称获取简单设置 单元格存储总结 前言 列表的使用主要基于QTableWidget控件,同步使用QTableWidgetItem进行单元格的设置,最后可以使用QAxObject进行单元格的数据读出将数据进行存储。接下来…...
【Pandas】pandas DataFrame dropna
Pandas2.2 DataFrame Missing data handling 方法描述DataFrame.fillna([value, method, axis, …])用于填充 DataFrame 中的缺失值(NaN)DataFrame.backfill(*[, axis, inplace, …])用于**使用后向填充(即“下一个有效观测值”)…...
Vue3学习(接口,泛型,自定义类型,v-for,props)
一,前言 继续学习 二,TS接口泛型自定义类型 1.接口 TypeScript 接口(Interface)是一种定义对象形状的强大工具,它可以描述对象必须包含的属性、方法和它们的类型。接口不会被编译成 JavaScript 代码,仅…...
