左旋字符串解析



题目

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

例如:

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB


 


法1:一个个移动

#include<stdio.h>
#include<string.h>//把一个字符串s,左移time个字符
void leftRound(char* s, int time)
{int len = strlen(s);time = time % len;for (int i = 0; i < time; i++){char tmp = s[0];int j = 0;for (j = 0; j < len - 1; j++){s[j] = s[j + 1];//后者覆盖前面}//放回s[j] = tmp;}
}
int main()
{char ch[] = "ABCDEFG";leftRound(ch, 2);printf("%s", ch);return 0;
}

优化1

我们可以选择拼接法,一次到位:

void leftRound(char * s, int time)
{int len = strlen(s);int pos = time % len; //断开位置的下标char tmp[256] = { 0 }; //更准确的话可以选择malloc len + 1个字节的空间来做这个tmpstrcpy(tmp, s + pos); //先将后面的全部拷过来strncat(tmp, s, pos); //然后将前面几个接上strcpy(s, tmp); //最后拷回去
}

优化2

另一种思路:先将要左旋的前三个家伙逆序(CBADEFG),然后将后半段也逆序(CBAGFED),最后整体逆序(DEFGABC)即可。这样只需要做数值交换即可,可以写一个函数帮我们完成局部逆序,代码如下:

void reverse_part(char *s, int start, int end) //将字符串从start到end这一段逆序
{int i, j;char tmp;for (i = start, j = end; i < j; i++, j--){tmp = s[i];s[i] = s[j];s[j] = tmp;}
}void leftRound(char * s, int time)
{int len = strlen(s);int pos = time % len;reverse_part(s, 0, pos - 1); //逆序前段reverse_part(s, pos, len - 1); //逆序后段reverse_part(s, 0, len - 1); //整体逆序
}

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

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

相关文章

数据结构通讲

目录 集合源码详解 一、常见数据结构讲解 1. 线性数据结构 1.1 数组 1.2 队列 1.3 链表 1.3.1 单向链表 1.3.2 双向链表 1.4 栈 2. 非线性数据结构 2.1 树 2.2 二叉树 2.2.1 概念介绍 2.2.2 遍历操作 2.2.3 删除节点 2.2.4 查找局限性 2.2.5 AVL 2.3 2-3-4树 …

【LeetCode: 589. N 叉树的前序遍历 + DFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

WordPress主题YIA移动端文章页的面包屑不显示怎么办?

平时我们一般都会在文章页导航菜单下方显示面包屑&#xff0c;类似于“当前位置&#xff1a;boke112百科 WordPress 正文”。平时用浏览器调试站点的时候&#xff0c;在Edge浏览器的“切换设备仿真”中&#xff0c;不管是选择什么设备都会显示面包屑。具体如下图所示&#xf…

掌握高性能SQL的34个秘诀多维度优化与全方位指南

掌握高性能SQL的34个秘诀&#x1f680;多维度优化与全方位指南 本篇文章从数据库表结构设计、索引、使用等多个维度总结出高性能SQL的34个秘诀&#xff0c;助你轻松掌握高性能SQL 表结构设计 字段类型越小越好 满足业务需求的同时字段类型越小越好 字段类型越小代表着记录占…

基于JavaWeb开发的智慧医院OA系统[附源码]

基于JavaWeb开发的智慧医院OA系统[附源码] &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 &#x1f4…

如何理解DFMEA的输入与输出——SunFMEA软件

设计FMEA&#xff08;DFMEA&#xff09;是一种用于评估设计阶段产品潜在失效的风险的工具。它通过对设计要素的逐一分析&#xff0c;识别出可能导致产品失效的因素&#xff0c;为设计团队提供改进和优化的依据。本文SunFMEA软件将详细介绍设计FMEA的输入与输出&#xff0c;帮助…

【深度优先搜索】【图论】【树】2646. 最小化旅行的价格总和

作者推荐 【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字 涉及知识点 深度优先搜索 图论 树 LeetCode2646. 最小化旅行的价格总和 现有一棵无向、无根的树&#xff0c;树中有 n 个节点&#xff0c;按从 0 到 n - 1 编号。给你一个整数 n 和一个长…

DS:八大排序之堆排序、冒泡排序、快速排序

创作不易&#xff0c;友友们给个三连吧&#xff01;&#xff01; 一、堆排序 堆排序已经在博主关于堆的实现过程中详细的讲过了&#xff0c;大家可以直接去看&#xff0c;很详细,这边不介绍了 DS&#xff1a;二叉树的顺序结构及堆的实现-CSDN博客 直接上代码&#xff1a; …

教你如何用vs2022 制作自己的模板

首先现将我们的模板代码写好 如图&#xff1a; 选择项目&#xff1a; 选择导出模板&#xff1b; 如下图 如果只有一个项 两个都可以选&#xff0c;如果有多个项&#xff0c;就只能选第一个 然后给自己的模板起个名字 注意&#xff1a;不能有特殊符号&#xff0c;也不能有中…

win32汇编获取系统信息

.data fmt db "页尺寸&#xff1a;%d",0 db "" lpsystem SYSTEM_INFO <?> szbuf db 200 dup(0) .const szCaption db 系统信息,0 .code start: invoke GetSystemInfo,addr lpsystem …

渲染案例 |《甲辰春来,福暖四季》蓝海创意云助力央视新闻频道打造2024龙年除夕视觉盛宴

随着2024年甲辰龙年的脚步渐近&#xff0c;中央广播电视总台新闻频道精心策划的除夕特别节目《甲辰春来&#xff0c;福暖四季》于2月9日上午9点准时与全国观众见面。这一场充满传统韵味与现代气息的视觉盛宴&#xff0c;不仅展现了浓厚的节日氛围&#xff0c;更在技术上实现了突…

如何选择合适的三防平板?

一、随着移动互联网的快速发展&#xff0c;平板电脑作为一种轻便、易携带的移动设备已经成为了人们生活中必不可少的一部分。在一些特殊的工作环境下&#xff0c;例如工地、野外等场景&#xff0c;常规的平板电脑可能无法满足使用要求&#xff0c;因此人们需要选择一款具有防水…