【字符串左旋右旋不會做?快來看看這篇“彈幕滾動”,你就有思路了!】

前言

不知道大家在做題時有沒有遇到過“字符串旋轉”的題目,很多人可能沒有思路,這里我不具體講解單一的題目,而是展現一個“彈幕滾動”的示例,相信大家看懂后就能做出“字符串旋轉”的題了!

技術名詞解釋

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.pswp.cn/news/715021.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715021.shtml
英文地址,請注明出處:http://en.pswp.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括號問題…