【C语言】字符串左旋(三种方法)

(方法3只给出思路参考)

问题

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

例如:

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB

分析

 我们先来理解一下,什么叫“左旋”?其实是这个意思:

由于没有规定左旋次数限制,我们还要注意的是,左旋4次后又变回原来的字符顺序了。所以左旋5次相当于左旋1次。(这样可以优化我们的代码)

在搞清楚这点后,我们才应该开始想具体的左旋代码怎么写。

方法1

我们一次旋一个,把旋几个当成旋几次

那么现在旋一次要怎么写呢?

首先,我们创建一个临时变量,把第一个字符赋给它;

其次,让后面的字符依次向前移动一位;

最后,把临时变量的字符赋给字符串的最后一个位置。

参考代码:

#include<stdio.h>
#include<string.h>
void zuo(char str[],int num)
{int len = strlen(str);num = num % len;//优化//假如ABCD旋5次,就变为旋5%4即1次while (num--)//旋num次{//我们就不要左旋几个一次操作几个了,而是当作次数。每次就旋一个。char tmp = str[0];//把后一个赋前一个,就可以实现往前移int i = 0;while (i < len - 1)//如果是len,i最大取值len-1,但是i+1取到len,str[len]越界了{str[i] = str[i + 1];i++;}//此时i为len-1,str[i]为最后一个字符str[i] = tmp;//注意不要错写成str[i+1]=tmp;}
}
int main()
{char str[50];scanf("%s", str);int num;scanf("%d", &num);//把要旋的次数传过去zuo(str,num);printf("%s\n", str);return 0;
}

提示:printf() 输出字符串时,会从第 0 个元素开始往后检索,直到遇见’\0’才停止,然后把’\0’前面的字符全部输出,这就是 printf() 输出字符串的原理。)

运行效果: 

 方法2

使用strcpy和strncat

现在我们就不将旋几个看为旋几次了,而是直接要旋几个就一次性旋几个,而要达到这一效果我们就不得不使用到函数strcpy和strcat。

实现逻辑就是我们创建一个临时数组:char tmp[50];把左旋字符以外的后面的字符先拷贝进tmp,再将要左旋的字符拼接到tmp后面,此时得到的tmp就是左旋后的字符数组,我们再将其拷贝回str。

那么在写代码前先来关心一下我们的strcpy和strcat:

前一个参数是目标地址,后一个参数是源地址。也就是说前一个参数是指向我们要拷贝到的字符数组,后一个参数被拷贝的字符串。

 

strcat的参数看起来和strcpy一样,前一个也是char* destination 后一个也是char* source,但前一个参数指向的是要被拼接的字符数组,后一个参数指向的是拼接物。

(图示)

 

但是我们会注意到strcat会把作为source的字符串整个拼接到destination,而对于本题目而言,我们只想拼接我们左旋个数的字符,假如我们要对ABCD左旋2个,在把字符CD拷贝进tmp之后我们需要再将AB拼接到tmp后面,如果写的是strcat(tmp,str);那么会变成CDABCD:

所以我们应该使用的是strncat函数,可以按我们拼接我们想要的个数。

 

区别就是,strncat(tmp,str,num);会将str开始的num个字符拼接到tmp的末尾处。 

 了解怎么调用后,我们就可以写我们的代码了:

这就是我们的方法2。

 

方法3

到此,本文就结束了,祝阅读愉快^_^ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决odbc 数据源创建之后删除失败问题

问题描述 该问题一般存在于用32位odbc管理程序删除了64位管理程序创建的数据源&#xff0c;被提示失败&#xff0c;然后再用64位odbc管理程序删除时发现删除不掉。怎么都删除不掉&#xff0c;不会影响体验&#xff0c;但是很膈应 问题解决 将该路径下的对应的ODBC数据源&…

使用Minikube+docker+harbor+k8s自动化部署 @by_TWJ

目录 1. 开始1.1. 环境1.2. 测试的git仓库1.3. 离线文件1.4. 安装docker1.5. 安装docker-compose&#xff08;非必要&#xff09;1.6. 安装Jenkins1.7. 安装harbor1.8. 允许docker通过http访问私有仓库1.9. 修改/etc/hosts&#xff0c;追加自定义域名1.10. 安装Minikube 2. min…

【Javascript系列】Terser通过调用API来实现代码的压缩和优化功能

Terser通过调用API来实现代码的压缩和优化功能 起源通过API来调用API调用过程中的一个隐含的技术点 - 异步调用和Promise对象官方文档中的一个有点容易忽略和混淆的地方关于Promise 起源 书接 上回&#xff0c;对Terser的功能做了一个初步的探索。在官方的主页上&#xff0c;有…

Windows系统电脑本地部署AI音乐创作工具并实现无公网IP远程使用

文章目录 前言1. 本地部署2. 使用方法介绍3. 内网穿透工具下载安装4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows系统电脑上快速本地部署一个文字生成音乐的AI创作工具MusicGPT&#xff0c;并结合cpolar内网穿透工具实现随时随地远程访问使用。 MusicG…

22、matlab锯齿波、三角波、方波:rectpuls()函数/sawtooth()函数/square()函数

1、采样的非周期性矩形 语法 语法1&#xff1a;y rectpuls(t) 返回一个以数组 t 中指示的采样时间采样的连续非周期性单位高度矩形脉冲&#xff0c;该矩形脉冲以 t 0 为中心。 语法2&#xff1a;y rectpuls(t,w) 生成一个宽度为 w 的矩形 参数 t:采样时间 w:矩形宽度…

两步教你学会内网穿透

文章目录 1.下载安装ngrok安装包2.生成固定的域名3.访问 1.下载安装ngrok安装包 1.注册登录ngrok网站ngrok官网 页面下滑点击下载下载&#xff1a; 2.解压&#xff08;双击ngrok.exe进入终端&#xff09; 3.终端绑定账户信息&#xff08;复制如下图信息到终端&#xff09; …

Win11下只支持IE浏览器的老网站顺畅运行的方法

在Windows 11操作系统中&#xff0c;由于Internet Explorer&#xff08;IE&#xff09;浏览器的逐步淘汰&#xff0c;微软官方已不再直接支持IE浏览器。然而&#xff0c;当您遇到必须访问仅支持IE的老旧网站时&#xff0c;Windows 11仍然提供了一些实用的替代方案来应对这一挑战…

前端加载,渲染十万条数据(性能优化)

1.场景 项目中某个弹窗展示设备信息卡片,返回的设备信息很多,页面样式有很花哨,导致渲染极其缓慢 f12,查看性能,这里可以看到页面加载在哪一步分耗时最长,针对性进行优化(图为举例) 2.解决思路 采用虚拟列表的方式,滚动时,dom元素数量不变,只改变展示的数据 结构描述: 父盒…

项目中统一异常处理

项目中统一异常处理 1.异常处理框架图2.实现 1.异常处理框架图 异常处理除了输出在日志中&#xff0c;还需要提示给用户&#xff0c;前端和后端需要作一些约定&#xff1a; 错误提示信息统一以json格式返回给前端。以HTTP状态码决定当前是否出错&#xff0c;非200为操作异常。…

在国内PMP含金量并不高?

PMP已经在全球194个国家和地区得到广泛认可&#xff0c;自1999年开始在国内实施。PMP被认为是项目管理专业身份的象征&#xff0c;是项目经理最重要的资质。获得PMP证书意味着个人的项目操作水平已经得到了PMI的认可&#xff0c;具备国际专业项目操作者水平&#xff0c;有资格专…

就凭这张图,下订华为享界S9

文 | Auto芯球 作者 | 雷慢 冲啦&#xff01;就在刚刚&#xff0c; 我们团队下订了一辆享界S9&#xff0c; 还琢磨买奔驰S级&#xff0c;宝马7系和奥迪A8的老板们&#xff0c; 是应该试试享界S9了&#xff0c; 至少先占个坑&#xff0c;8月底S9上市当天&#xff0c; 可以…

【vscode免密连接云服务器】

目录&#xff1a; 前言1.1 生成 SSH 密钥对1.2 将公钥复制到远程服务器1.3配置remote ssh 插件信息 总结 前言 剑指offer&#xff1a;一年又120天 1.1 生成 SSH 密钥对 在本地cmd命令窗口执行: ssh-keygen -t rsa会提示你设置生成密钥的文件、密码等等&#xff0c;可以一路回…

【Makefile笔记】小白入门篇

【Makefile笔记】小白入门篇 文章目录 【Makefile笔记】小白入门篇所需组件一、简单了解Makefile1.Makefile简介2.Makefile 原理 二、为什么要使用Makefile1.解决编译时链库的不便2.提高编译效率&#xff0c;缩短编译时间&#xff08;尤其是大工程&#xff09; 三、Makefile语法…

css 图片上添加模糊背景的文字内容

html部分 <div class"onlogo"> <img src"../assets/img/banner.png" /><div class"imgText"><div class"title">一体化电子印章应用服务</div><div class"content">为企业提供安全可靠…

SpringCloud Consul基础入门与使用实践总结

【1】Consul简介 官网地址&#xff1a;https://www.consul.io/intro/index.html 下载地址&#xff1a;https://www.consul.io/downloads.html 中文文档&#xff1a;https://www.springcloud.cc/spring-cloud-consul.html ① 基础概念 Consul 是一套开源的分布式服务发现和…

网络编程(五)

网络编程&#xff08;五&#xff09; 网络服务器超时检测使用select进行超时检测套接字属性**getsockopt:获取socket软通道的某项属性值**setsockopt:设置socket软通道的某项属性值**&#xff08;socket建立之后就可使用&#xff09; 信号**signal()&#xff1a;信号处理函数se…

Android11 AudioTrack 创建过程

Android 系统播放声音&#xff0c;需要创建AudioTrack来和AudioFlinger通信&#xff0c;其创建过程如下 根据传入的声音属性得到output通过得到的output&#xff0c;找到播放线程AudioFlinger在播放线程内&#xff0c;创建Track&#xff0c;和AudioTrack对应。后续通过它们进…

低代码设计中的组织结构的作用与模式

一、组织结构的作用 在低代码设计中&#xff0c;组织结构是系统运作的基石&#xff0c;它定义了系统中的关键元素&#xff0c;包括人员、部门、角色&#xff0c;以及一人多部门、一人多部门多角色的复杂关系。这种定义不仅为系统提供了清晰的运行框架&#xff0c;还确保了系统…

这是一张单纯的图片

说明&#xff1a;通过简单的一张图片找到flag。 打开给出的图片&#xff0c;是一个卡通头像。 方法一&#xff1a; 使用notepad再次打开图片&#xff0c;最后一行发现一行编码。 通过给出的编码格式&#xff0c;可判断是ASCII编码。 使用Ascii编码解码工具&#xff0c;对这串…

贾英才医生:什么是脑白质病?如何预防此病?

贾英才医生&#xff0c;目前就任于北京崇文门中医医院&#xff0c;作为在医学领域有着深厚造诣和丰富经验的专业人士&#xff0c;在此深入探讨和剖析这样一个重要的医学话题&#xff1a;究竟什么是脑白质病&#xff1f;以及我们应该采取怎样切实可行的措施来有效预防此种疾病的…