【字符串左旋右旋不会做?快来看看这篇“弹幕滚动”,你就有思路了!】

前言

不知道大家在做题时有没有遇到过“字符串旋转”的题目,很多人可能没有思路,这里我不具体讲解单一的题目,而是展现一个“弹幕滚动”的示例,相信大家看懂后就能做出“字符串旋转”的题了!

技术名词解释

1.什么是“字符串旋转”? 

举个例子:给定字符串“abcdef”,左旋一个单位就是“bcdefa”,两个就是“cdefab”,右旋同理。

2.何为弹幕滚动?

弹幕滚动就是基于字符串旋转的原理,只不过是持续进行旋转罢了,比如“abcdef”紧接着的是“bcdefa”……每次显示都会覆盖上次显示的内容(用到回车符),接下来我们主要介绍从右向左滚动的实现

整体架构思路

1.正常遍历字符串

给定一个字符串,我们来看一下正常遍历的代码是怎样的:

int main()
{char str[] = "da jia hao ,wo shi xxx";int len = strlen(str);int i;for (i = 0; i < len; i++){putchar(str[i]);}return 0;
}

大家应该都对这段代码没什么问题,那就应该知道这段代码是从字符串的第一个元素开始打印的,要想滚动显示,下一次就应该从第二个元素开始打印吧,并且首元素还要放在最后一位,第三次是第三个元素打头,末尾放第二元素……要想实现这种流程,我们不妨再借助一位变量的帮助,这就有了我们的第二个思路

2.另创变量cnt,打头元素靠他变,末尾元素照不误

int i;
int cnt = 0;
char str[] = "da jia hao, wo shi xxx";
int len = strlen(str);for (i = 0; i < len; i++){if (cnt + i < len)putchar(str[cnt + i]);elseputchar(str[cnt + i - len]);}
  分析一下代码,在遍历过程中,如果cnt+i没有超出最大下标len-1,那么所要显示的元素下标便是cnt+i,但如果大于等于len,cnt+i就不可能作为数组下标了吧,因为会越界,但是没关系,我们最后要显示的是本次所显示的开头元素之前的元素,所以最后要显示的元素下标是cnt+i-len,当然,现在我们的cnt是0,所以跟之前的只有i的情况没啥区别,但只要当cnt=1时,是不是就是从第二个元素开始遍历了呢,cnt=2时是从第三个开始,以此类推……

  列举一下看看:假设字符串长度为5(abcde),当cnt=1时,i从0到4递增,当i=0,1,2,3时,只靠if语句就可以显示(bcde)了,当i=4时,cnt+i等于5,该走else语句了,显示的是cnt+i-len也就是0下标,因此最后一个元素就是首元素,这不就达成了预期吗

OK,思路到这里没问题吧,接下来就要考虑如何让cnt变化了,也就是有了思路三。

3.cnt背后当大佬,让谁出场谁出场

cnt该怎么变化呢,我们知道弹幕滚动的关键变化就在开头和结尾,第一次以字符串的首元素为开头,第二次以次元素开头……不知道大家有没有发现,每当显示开头字符的时候,i的值必然为0,而要显示的首字符又是依次递增的,那是不是只要让cnt依次递增,首字符也就依次往后排了呢,OK,就是这个思路往下走!cnt初始值是0,依次递增下去,直到cnt=len-1时,也就是最后一个元素下标时,str【cnt+i】(i=0)就是字符串的最后一个字符,如果想再来一遍滚动,就让cnt重新归0,并重复上述过程即可。代码如下:

int main()
{int i;int cnt = 0;char str[] = "da jia hao, wo shi xxx";int len = strlen(str);while (1){putchar('\r');for (i = 0; i < len; i++){if (cnt + i < len)putchar(str[cnt + i]);elseputchar(str[cnt + i - len]);}Sleep(500);if (cnt < len - 1)cnt++;elsecnt = 0;}return 0;
}

技术细节

1.代码补充

  最后代码示意图中采用了无限循环“字幕滚动”的形式,为了避免“字符满天飞”的现象,用了‘\r’,每次显示弹幕但会覆盖掉上次的弹幕,因此最终屏幕上也只有一行字符,同时为了体现出“滚动”的效果,中间用了Sleep函数延缓程序短暂时间,也就是每次显示完一行弹幕后,都会延缓0.5秒才显示下一次的弹幕

2.关于弹幕从左向右滚动

无需改变过多代码,只需将下面的if else语句稍加修改即可

int main()
{int i;int cnt = 0;char str[] = "da jia hao, wo shi xxx";int len = strlen(str);while (1){putchar('\r');for (i = 0; i < len; i++){if (cnt + i < len)putchar(str[cnt + i]);elseputchar(str[cnt + i - len]);}Sleep(500);if (cnt =0)cnt=len-1;elsecnt --;}return 0;
}

小结

学好字幕滚动,字符串旋转都是小菜!

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

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

相关文章

关于决策树模型

决策树模型是一种常用的数据挖掘方法&#xff0c;它通过模拟人类决策过程来对数据进行分类或回归分析。决策树由节点和边组成&#xff0c;其中每个内部节点代表一个属性上的测试&#xff0c;每个分支代表测试的一个结果&#xff0c;而每个叶节点&#xff08;树的末端&#xff0…

Vue3 isProxy,isReactive,isReadonly 三者解析

1、isProxy 作用&#xff1a;判断当前数据是否为代理数据。 注意&#xff1a;它只对通过 reactive&#xff0c;readonly&#xff0c;shallowReactive&#xff0c;shallowReadonly 这四个方法包裹的数据返回true&#xff0c;对于 ref 以及通过 new Proxy 代理的数据返回都是fal…

ChatGPT科研与AI绘图及论文高效写作教程

原文链接&#xff1a;ChatGPT科研与AI绘图及论文高效写作教程 2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电…

HPE ProLiant MicroServer Gen8更换坏硬盘(RAID 1+0)

HPE ProLiant MicroServer Gen8今天硬盘告警&#xff0c;坏了一块硬盘&#xff08;估计还是由于上次突然断电导致的&#xff09;&#xff0c;关机&#xff0c;拆下坏硬盘&#xff0c;更换新硬盘&#xff0c;开机后按了一次F1键&#xff0c;系统继续启动并正常使用&#xff0c;同…

高性能MySQL 第4版

第一章MySQL架构 MySQL提供了多种锁的颗粒度&#xff0c;每种MySQL存储引擎都可以实现自己的锁策略和锁力度。 行级锁是在存储引擎而不是在服务器中实现的。 隔离界别 READ UNCOMMITTED - 脏读 在事务中可以可以查看到其他事务中还没有提交的修改。实际中很少用。 READ C…

Linux网络编程——socket 通信基础

Linux网络编程——socket 通信基础 1. socket 介绍2. 字节序2.1 简介2.2 字节序举例2.3 字节序转换函数 3. socket 地址3.1 通用 socket 地址3.2 专用 socket 地址 4. IP地址转换&#xff08;字符串ip -> 整数&#xff0c;主机、网络字节序的转换 &#xff09;5. TCP 通信流…

算法------(13)KMP

例题&#xff1a;&#xff08;1&#xff09;AcWing 831. KMP字符串 。。其实写完也不太理解。。随便写点吧 KMP就是求next数组和运用next的数组的过程。相比传统匹配模式一次更新一单位距离的慢速方法&#xff0c;next数组可以让下表字符串一次更新n - next【n】个距离&#x…

Java读取文件

读取文件为String 、访问链接直接跳转html 环境&#xff1a;SpringMVC 、前端jsp InputStreamReader FileInputStream fileInputStream new FileInputStream(formatFile.getHtmlpath());InputStreamReader reader new InputStreamReader(fileInputStream, StandardCharsets…

【EAI 026】RoboGen: 通过自动数据生成管线实现机器人技能学习

Paper Card 论文标题&#xff1a;RoboGen: Towards Unleashing Infinite Data for Automated Robot Learning via Generative Simulation 论文作者&#xff1a;Yufei Wang, Zhou Xian, Feng Chen, Tsun-Hsuan Wang, Yian Wang, Zackory Erickson, David Held, Chuang Gan 作者单…

C++:菱形继承问题

目录 1、什么是菱形继承 2、虚拟继承 3、一些常见问题 1. 什么是菱形继承&#xff1f;菱形继承的问题是什么&#xff1f; 2. 什么是菱形虚拟继承&#xff1f;如何解决数据冗余和二义性的 3. 继承和组合的区别&#xff1f;什么时候用继承&#xff1f;什么时候用组合&#…

Qt 自定义长条进度条(类似播放器进度条)

1.运行界面 2.步骤 其实很简单。 2.1绘制底图圆角矩形 2.2绘制播放进度圆角矩形 参考&#xff1a;painter绘图 3.源码 #pragma once#include <QWidget> #include <QLabel> #include <QHBoxLayout> #include <QMouseEvent> #include <QDebug&g…

Slicer学习笔记(六十五) 3DSlicer的医学图像数据增强扩展模块

1. 医学图像数据增强扩展模块 基于3D Slicer5.1.0 编写了一个测试医学图像的数据增强测试扩展模块。 扩展模块名&#xff1a;DataAugementation 项目地址&#xff1a;DataAugmentation 下载该项目后&#xff0c;可以将该扩展模块添加到3D Slicer的扩展中。 关于如何给3DSlicer…

MySQL数据库基本操作(一)

数据库的基本概念 1. 数据库的英文单词&#xff1a; DataBase 简称 &#xff1a; DB 2. 什么数据库&#xff1f;* 用于存储和管理数据的仓库。 ​ 3. 数据库的特点&#xff1a;1. 持久化存储数据的。其实数据库就是一个文件系统2. 方便存储和管理数据3. 使用了统一的方式操作数…

微信自动回复,基于python

#!/usr/bin/python3 # -*- coding: utf-8 -*-import numpy as np import pandas as pd from uiautomation import WindowControl import csvwx WindowControl(Name微信,searchDepth1 ) # 切换窗口 wx.ListControl() wx.SwitchToThisWindow() # 寻找会话控件绑定 hw wx.…

LaTeX-设置表格大小

文章目录 LaTeX-设置表格大小1.创建表格2.设置表格的宽度2.1控制表格每一列的宽度2.2控制整个表格的宽度 3.设置表格的外观4.LaTeX绘制三线表 LaTeX-设置表格大小 本文介绍了LaTeX如何设置表格的大小、改变表格的外观以及如何绘制三线表。 1.创建表格 在LaTeX中创建表很耗时…

【前端素材】推荐优质后台管理系统网页my-Task平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;通常由管理员使用。后台管理系统是一种用于管理和控制网站、应用程序或系统的管理界面。它通常被设计用来让网站或应用程序的管理员或运营人员管理内容、用户、数据以及其他相关功…

2023年NOC大赛软件创意编程(学而思)赛道图形化小低高组决赛试题

2023NOC 决赛-小低组 每个小朋友从小会有梦寐以求的愿望,或是拥有孙悟空七十二变的能 力,或是像神笔马良一样想要什么画什么,或是成为人见人爱的国宝 大熊猫,或是变身全能机器人……今天,你可以用编程实现自己愿望! 【题目要求】 请以“假如我是_____”为题,自选主…

Sentinel实战(待完善)

目录 服务雪崩 什么是服务雪崩 服务不可用原因 解决方案 技术选型对比 Sentinel 介绍 优点 核心概念 资源 规则 代码实战 API实现 SentinelResource注解实现 Sentinel控制台 启动控制台服务 java应用接入控制台 微服务接入Sentinel 服务雪崩 什么是服务雪崩…

DETR详解

1. 动机 传统的目标检测任务需要大量的人工先验知识&#xff0c;例如预定义的先验anchor&#xff0c;NMS后处理策略等。这些人工先验知识引入了很多人为因素&#xff0c;且较难处理。如果能够端到端到直接生成目标检测结果&#xff0c;将会使问题变得很优雅。 2. 主要贡献 提…

牛客小白月赛87 A-G 题解 | JorbanS

文章目录 [A - 小苯的石子游戏](https://ac.nowcoder.com/acm/contest/73854/A)[B - 小苯的排序疑惑](https://ac.nowcoder.com/acm/contest/73854/B)[C - 小苯的IDE括号问题&#xff08;easy&#xff09;](https://ac.nowcoder.com/acm/contest/73854/C)[D - 小苯的IDE括号问题…