【PTA刷題】 求子串(代碼+詳解)

【PTA刷題】 求子串(代碼+詳解)

題目

請編寫函數,求子串。

函數原型

char* StrMid(char *dst, const char *src, int idx, int len);

說明:函數取源串 src 下標 idx 處開始的 len 個字符,保存到目的串 dst 中,函數值為 dst。若 len 值不正確,則自動修正。若 idx 值不正確,則目的串為空串。

裁判程序

#include <stdio.h>char* StrMid(char *dst, const char *src, int idx, int len);int main()
{char a[128], b[128];int s, n;gets(a);scanf("%d%d", &s, &n);StrMid(b, a, s, n);puts(b);return 0;
}/* 你提交的代碼將被嵌在這里 */

輸入樣例1

abcd
1 2

輸出樣例1

bc

輸入樣例2

abcd
1 5

注:5 不正確,按 3 處理。

輸出樣例2

bcd

輸入樣例3

abcd
-5 2

輸出樣例3


注:輸出為空串。

代碼

char* StrMid(char *dst, const char *src, int idx, int len) {// 檢查參數是否合法if (idx < 0) {dst[0] = '\0'; // 如果 idx 不正確,將目的串設為空串} else {int src_len = strlen(src);if (idx >= src_len || len <= 0) {dst[0] = '\0'; // 如果 idx 超出源串長度或 len 不正確,將目的串設為空串} else {// 修正 len,確保不超出源串的長度if (len > src_len - idx) {len = src_len - idx;}// 拷貝子串到目的串strncpy(dst, src + idx, len);dst[len] = '\0'; // 確保目的串以 null 結尾}}

解析

這是一個關于字符串操作的題目,我會逐步解釋這個函數的實現細節。這個題目是一個C語言函數,其目的是從源字符串中復制一部分到目標字符串中。

首先,讓我們看一下這個函數的原型:

char* StrMid(char *dst, const char *src, int idx, int len);

這個函數接受四個參數:

  1. dst:目標字符串,函數將復制的子串存儲在這里。
  2. src:源字符串,函數將從這里復制子串。
  3. idx:開始復制的位置。
  4. len:要復制的字符數。

現在,讓我們逐步來看這個函數的實現。

首先,函數會檢查參數是否合法。如果 idx 小于0,說明開始位置不正確,這時將目標串設為空串。

if (idx < 0) {dst[0] = '\0'; // 如果 idx 不正確,將目的串設為空串
}

然后,函數會計算源串的長度,并檢查 idx 是否超過了源串的長度或者 len 是否不合法。如果是的話,同樣將目標串設為空串。

else {int src_len = strlen(src);if (idx >= src_len || len <= 0) {dst[0] = '\0'; // 如果 idx 超出源串長度或 len 不正確,將目的串設為空串}

接下來,如果參數都合法,函數會修正 len 的值,確保不超出源串的長度。

else {if (len > src_len - idx) {len = src_len - idx;}

最后,函數使用 strncpy 函數從源串復制子串到目標串,并確保目標串以 null 結尾。

// 拷貝子串到目的串
strncpy(dst, src + idx, len);
dst[len] = '\0'; // 確保目的串以 null 結尾

最終,函數返回目標串的指針。

return dst;

這個函數的設計考慮了很多情況,確保了參數的合法性,并且在復制過程中進行了必要的修正。如果有任何問題,請隨時提問。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213311.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213311.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213311.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【W5500】關于使用外部網絡變壓器的原理圖設計

直接上原理圖 鏈接也放一個吧【鏈接】 按照這個畫&#xff0c;我實驗在立創EDA上打了一個實驗過是可以用的~ 畫出來的板子長這個樣子【就不公開原理圖和PCB了&#xff0c;這個板子還是很容易畫的】~ 注意在立創上找對網口&#xff0c;要無變壓器的網口&#xff0c;相比TB賣的那…

基于Springboot+Vue前后端分離的電影推薦系統(Java畢業設計)

大家好&#xff0c;我是DeBug&#xff0c;很高興你能來閱讀&#xff01;作為一名熱愛編程的程序員&#xff0c;我希望通過這些教學筆記與大家分享我的編程經驗和知識。在這里&#xff0c;我將會結合實際項目經驗&#xff0c;分享編程技巧、最佳實踐以及解決問題的方法。無論你是…

前端路由(front-end routing)和后端路由(back-end routing)的區別

聚沙成塔每天進步一點點 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 歡迎來到前端入門之旅&#xff01;感興趣的可以訂閱本專欄哦&#xff01;這個專欄是為那些對Web開發感興趣、剛剛踏入前端領域的朋友們量身打造的。無論你是完全的新手還是有一些基礎的開發…

滲透測試學習day8

文章目錄 靶機&#xff1a;UnifiedTask1Task2Task3Task4 5-14解題過程Task5Task6Task7Task8Task9Task10Task11Task12Submit user flagSubmit root flag 靶機&#xff1a;Unified Task1 問題&#xff1a;前四個開放端口是哪一個&#xff1f; 22,6789,8080,8443nmap掃一下 T…

解決IDEA配置gitignore不生效

idea gitignore 不生效 原因 之前已經git add 過&#xff0c;之后再設置.gitignore 文件是不會生效的 解決 撤銷 git add 操作&#xff0c;在控制臺輸入命令&#xff1a; git reset重新使用IDEA 提交代碼即可

打包HTML

結合之前的webpack打包 &#xff0c;對HTML進行相對應的打包 1.在瀏覽器打開npm搜索 html—webpack—插件 2.下劃找到lnstall復制webpack5里的第一句到終端 3.下滑找到用法配置腳本語言 3.1 復制下圖代碼到之前的webpack.config.js腳本里放在開頭的位置 3.2 復制下圖代碼到之…

pandas 使用方法(1)

目錄 1. excel 表格處理 (1) 讀取excel 表格 (2) 抽取excel表部分列數據 (3) 保存數據到excel表格 (4) 保存到 excel 表中的不同sheet 2. 判斷二維數組中的某個數值是否為空 3. 刪除二維數組中的空行 4. 在列表中添加某列屬性 本文是將使用pandas過程中遇到的問題進行了…

功率器件是什么

功率器件 電子元器件百科 文章目錄 功率器件前言一、功率器件是什么二、功率器件的類別三、功率器件的應用實例四、功率器件作用原理總結前言 功率器件可根據其功率承載能力、工作頻率、開通電阻、速度和效率等參數進行選擇,以滿足不同應用的需求。功率器件的應用領域涉及到電…

【Web】SCU新生賽個人wp及完賽感想

目錄 一些碎碎念&#xff1a; Web Guideline 2048 ezupload hardupload ezphp ezweb ezsql webbuilder tarit tarit_revenge VipDinner simplespi 一些碎碎念&#xff1a; scu新生賽是我全心全力打的第二場比賽&#xff0c;歷時七天&#xff0c;期間不免煎熬&…

孜然地址引導頁V9(帶后臺)

剛剛在瀏覽之前經常訪問的網站的時候我發現他不用那個域名了&#xff0c;然后我見這個頁面好看&#xff0c;就把他干下來了&#xff0c;然后把給他寫了個后臺。另外如果你的子頁面收錄多的話&#xff0c;人家百度訪問你的子頁面會顯示404的&#xff0c;所以為了流量可觀安裝這個…

【算法題】字符串變換最小字符串 * (js)

思路&#xff1a; 將字符按字典排序得到minStr&#xff0c;對比原str 如果 minStr str 則本身就是最小字符串 否則從前往后遍歷str&#xff0c;讓str[i]和minStr[i]對比&#xff0c;如果不同則替換 str[i]為minStr[i],并且這個minStr[i]這個字符要從str中尋找&#xff0c; 如果…

抓取真實瀏覽器設備指紋fingerprint寫入cookie方案

一個關于抓取真實瀏覽器設備指紋寫入cookie方案&#xff0c;用戶訪問頁面獲取到用戶設備生成指紋id&#xff0c;通過js把指紋存入cookie&#xff0c;然后用php進行獲取cookie存的指紋值到后臺。 用途&#xff1a;追蹤用戶設備&#xff0c;防惡意注冊&#xff0c;防惡意采集 瀏…

C語言-每日刷題練習

[藍橋杯 2013 省 B] 翻硬幣 題目背景 小明正在玩一個“翻硬幣”的游戲。 題目描述 桌上放著排成一排的若干硬幣。我們用 * 表示正面&#xff0c;用 o 表示反面&#xff08;是小寫字母&#xff0c;不是零&#xff09;&#xff0c;比如可能情形是 **oo***oooo&#xff0c;如果…

第9講、集成服務(增強用戶使用體驗感):

1、插入集成服務安裝盤 操作系統關閉&#xff1a; 1&#xff09;當物理機關機時&#xff0c;Hyper-V上的虛擬機將優先于物理機裝機&#xff0c;如果此時虛擬機還有應用 正在運行&#xff0c;那么會先保存這些應用至磁盤&#xff0c;然后再有序…

【Hadoop_03】HDFS概述與Shell操作

1、集群配置&#xff08;1&#xff09;集群啟動/停止方式總結&#xff08;2&#xff09;編寫Hadoop集群常用腳本&#xff08;3&#xff09;常考面試題【1】常用端口號【2】常用配置-文件 2、HDFS概述&#xff08;1&#xff09;HDFS產出背景及定義&#xff08;2&#xff09;HDFS…

K8S學習指南(9)-k8s核心對象init pod

文章目錄 引言什么是Init容器&#xff1f;Init容器的使用場景1. 數據初始化2. 網絡設置3. 等待依賴服務 Init容器的生命周期1. **Pending**2. **Running**3. **Terminated** Init容器的示例Init容器的高級用法結論 引言 Kubernetes&#xff08;簡稱K8s&#xff09;是一個強大的…

qmap類

QMap是一個關聯數組&#xff0c;它將鍵&#xff08;key&#xff09;與值&#xff08;value&#xff09;相關聯。QMap類提供了一系列方法來操作和查詢其中存儲的數據。下面是一些常見的QMap方法及其示例代碼&#xff1a; insert()方法用于將鍵值對插入到QMap中。如果鍵已經存在&…

軟件工程考試復習

第一章、軟件工程概述 &#x1f31f;軟件程序數據文檔&#xff08;考點&#xff09; &#x1f31f;計算機程序及其說明程序的各種文檔稱為 &#xff08; 文件 &#xff09; 。計算任務的處理對象和處理規則的描述稱為 &#xff08; 程序 &#xff09;。有關計算機程序功能、…

SQL注入概述

預計更新1.SQL注入概述 1.1 SQL注入攻擊概述 1.2 SQL注入漏洞分類 1.3 SQL注入攻擊的危害 SQLMap介紹 2.1 SQLMap簡介 2.2 SQLMap安裝與配置 2.3 SQLMap基本用法 SQLMap進階使用 3.1 SQLMap高級用法 3.2 SQLMap配置文件詳解 3.3 SQLMap插件的使用 SQL注入漏洞檢測 4.1 SQL注入…

智能優化算法應用:基于灰狼算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于灰狼算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于灰狼算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.灰狼算法4.實驗參數設定5.算法結果6.參考文獻7.MA…