C/C++常用字符串函數

一、字符串函數介紹:

字符串作為程序中常用的數據類型,學會對字符串進行處理是作為一名C/C++程序員的基本功,我們要學會使用相關函數,并且對重點函數要會自己手動實現(下文對重點函數有實現代碼以及相關示例)

二、字符串函數詳解

1.strlen:

作用:求字符串的大小

使用:

實現:

size_t MyStrlen1(const char* str)
{assert(str!=nullptr);int len = 0;while (str[len] != '\0')len++;return len;
}

示例:

int main()
{const char* str = "123456";printf("%d\n", strlen(str));printf("%d\n", MyStrlen1(str));return 0;
}

注意:strlen記錄字符串函數大小,不包括'\0';

2.strcpy:

作用:將source字符串拷貝到destnation

使用:

實現:

char* MyStrcpy(char* destination, const char* source)
{assert(destination != nullptr);assert(source != nullptr);int pos = 0;while (source[pos] != '\0'){destination[pos] = source[pos];pos++;}destination[pos] = '\0';return destination;
}

示例:

int main()
{const char* str = "123456";char* str1 = (char*)malloc(strlen(str) + 1);printf("%s", strcpy(str1, str));printf("%s", MyStrcpy(str1, str));return 0;
}

3.strncpy:

作用:從source字符串拷貝指定長度到destnation字符串中

使用:

4.strcmp:

作用:字符串的比較

使用:

實現:

int MyStrcmp(const char* dst, const char* src)
{int pos1 = 0,pos2=0;while (dst[pos1]==src[pos2]&&dst[pos1]!='\0'){pos1++;pos2++;}return dst[pos1] - src[pos2];
}

示例:

int main()
{const char* str = "123456";const char* str1 = "123456";printf("%d\n", strcmp(str1, str));printf("%d", MyStrcmp(str1, str));return 0;
}

5.strncmp:

作用:指定長度的字符串比較

使用:

6.strcat:

作用:字符串的拼接

使用:

實現:

char* MyStrcat(char* destination, const char* source)
{assert(destination != nullptr);assert(source != nullptr);size_t pos1 = MyStrlen1(destination);size_t pos2 = 0;while (source[pos2] != '\0')destination[pos1++] = source[pos2++];destination[pos1] = '\0';return destination;
}

示例:

int main()
{char str[80];char str1[80];strcpy(str, "these ");MyStrcpy(str1, "these ");strcat(str, "strings ");MyStrcat(str1, "strings ");strcat(str, "are ");MyStrcat(str1, "are ");strcat(str, "concatenated.");MyStrcat(str1, "concatenated.");printf("%s\n", str);printf("%s\n", str1);return 0;
}

7.strncat:

作用:將source的指定長度字符串拼接到目標字符串末尾

使用:

8.strstr:

作用:查找子字符串在一個字符串的首次出現位置

使用:

實現:

char* MyStrstr(char* dst, const char* src)
{assert(dst);assert(src);int pos1 = 0;while (dst[pos1]!='\0'){int pos2 = 0;if (dst[pos1] == src[pos2]){int pos = pos1;while (dst[pos] == src[pos2]){pos++;pos2++;}if (src[pos2] == '\0')return dst + pos1;}pos1++;}return dst;
}

示例:

int main()
{char str[] = "This is a simple string";char str1[] = "This is a simple string";char* pch;char* pch1;pch = strstr(str, "simple");pch1 = MyStrstr(str1, "simple");if (pch != NULL)strncpy(pch, "sample", 6);if(pch1!=nullptr)strncpy(pch1, "sample", 6);printf("%s\n", pch);printf("%s", pch1);return 0;
}

9.strtok:

作用:將字符串按照指定的分割符切割成多個子串

使用:

示例:

int main()
{char str[] = "- This, a sample string.";char* pch;printf("Splitting string \"%s\" into tokens:\n", str);pch = strtok(str, " ,.-");while (pch != NULL){printf("%s\n", pch);pch = strtok(NULL, " ,.-");}return 0;
}

三、總結:

學會使用常見字符串的函數,處理好字符串等各種問題,對我們在項目工程等方面有非常重要的基礎作用,例如解決算法問題、網絡協議的制定、C++string類實現等等,當然本篇文章只講述了常用的字符串函數,對于其他函數,有興趣的朋友們可以看一下如下網址:<cstring> (string.h) - C++ Reference

還有一個簡單的思維導圖,方便大家復習鞏固

結語:

以上就是我分享的字符串函數的全部內容了,希望對大家有些幫助,也希望與一樣喜歡編程的朋友們共進步

謝謝觀看

如果覺得還闊以的話,三連一下,以后會持續更新的,我會加油的

祝大家早安午安晚安

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

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

相關文章

YOLO的Python實現以及 OpenCV

YOLO的Python實現以及 OpenCV Darknet 實現 YOLO 從頭開始開發 YOLO模型不容易&#xff0c;所以我們要使用預訓練模型在項目里進行目 標檢測。你可以在 https://pjreddie.com里到所有可用的預訓練模型。這是 Joseph C. Redmon的主頁&#xff0c;他是 Darknet的維護者。 注意 …

譯|Netflix 數據平臺運營中基于機器學習自動修復系統

來自上傳文件中的文章《Evolving from Rule-based Classifier: Machine Learning Powered Auto Remediation in Netflix Data Platform》 本文介紹了Netflix如何將基于規則的錯誤分類器與機器學習服務集成&#xff0c;實現Spark作業失敗的自動修復。技術亮點包括結合規則和ML智…

PAES算法求解 ZDT1 雙目標優化問題

前言 提醒&#xff1a; 文章內容為方便作者自己后日復習與查閱而進行的書寫與發布&#xff0c;其中引用內容都會使用鏈接表明出處&#xff08;如有侵權問題&#xff0c;請及時聯系&#xff09;。 其中內容多為一次書寫&#xff0c;缺少檢查與訂正&#xff0c;如有問題或其他拓展…

邏輯回歸的應用

一參數邏輯回歸參數及多分類策略等完整解析LogisticRegression 初始參數聲明LogisticRegression(penaltyl2, dualFalse, tol0.0001, C1.0, fit_interceptTrue, intercept_scaling1, class_weightNone, random_stateNone, solverliblinear, max_iter100, multi_classovr, verbos…

C語言(長期更新)第7講:VS實用調試技巧

C語言&#xff08;長期更新&#xff09; 第7講 VS實用調試技巧 跟著潼心走&#xff0c;輕松拿捏C語言&#xff0c;困惑通通走&#xff0c;一去不回頭~歡迎開始今天的學習內容&#xff0c;你的支持就是博主最大的動力。 目錄 C語言&#xff08;長期更新&#xff09; 第7講 …

CONTRASTIVE-KAN:一種用于稀缺標記數據的網絡安全半監督入侵檢測框架

研究背景與挑戰? ?工業環境需求?: 第四次工業革命中,物聯網(IoT)和工業物聯網(IIoT)的普及使網絡安全成為關鍵挑戰。 入侵檢測系統需實時性高,尤其對關鍵基礎設施(如燃氣管道)的快速攻擊檢測至關重要。 ?核心問題?: ?標簽數據稀缺?:工業系統多數時間處于正常…

綜合:單臂路由+三層交換技術+telnet配置+DHCP

技術考核1 實驗拓撲&#xff1a;實驗需求 1.按照圖示配置IP地址設備名 2.在SW1和SW2之間配置鏈路聚合增加鏈路帶寬&#xff0c;提高可靠性 3.PC5和PC6屬于VLAN10&#xff0c; PC7和PC8屬于VLAN20 4.SW1和SW2屬于二層交換機&#xff0c;SW3為三層交換機&#xff08;VLAN100用于對…

工業火焰識別漏報率↓78%!陌訊多模態融合算法實戰解析

原創聲明&#xff1a;本文技術方案解析基于陌訊技術白皮書2025版 標簽&#xff1a;#陌訊視覺算法 #火焰識別優化 #工業安全監控 #邊緣計算優化一、行業痛點&#xff1a;工業火災監控的漏檢危機據《2025工業安全白皮書》統計&#xff0c;化工場景傳統火焰識別系統漏報率高達35%&…

C++引用:高效安全的別名機制詳解

目錄 一、引用的概念 二、引用的特性 1、定義時必須初始化 2、一個變量可以有多個引用 3、引用一旦綁定實體就不能更改 三、const引用&#xff08;常引用&#xff09; 1、const引用的基本特性 2、臨時對象與const引用 3、臨時對象的特性 4、const 引用作為函數形參 …

大語言模型API付費?

下面是目前主流 大語言模型 API 的付費情況總覽&#xff1a; &#x1f9e0; 一、主要大語言模型 API&#xff1a;是否付費對比 提供方模型是否免費限制 / 說明OpenAIGPT-3.5 / GPT-4 / GPT-4o? 付費為主有免費額度&#xff08;如 ChatGPT 免費版&#xff09;&#xff0c;API …

巧用Wisdom SSH:容器化運維與傳統運維的抉擇

巧用Wisdom SSH&#xff1a;容器化運維與傳統運維的抉擇 在當下的技術領域&#xff0c;容器化運維與傳統運維是運維人員面臨的兩大主要方向&#xff0c;對于從業者來說&#xff0c;如何抉擇至關重要&#xff0c;而Wisdom SSH在其中能發揮顯著作用。 傳統運維&#xff1a;基石…

API征服者:Python抓取星鏈衛星實時軌跡

API征服者&#xff1a;Python抓取星鏈衛星實時軌跡從基礎調用到工業級衛星追蹤系統實戰指南一、太空數據時代&#xff1a;星鏈衛星的全球覆蓋??星鏈衛星網絡規模??&#xff1a;已發射衛星數量&#xff1a;4,000目標衛星總數&#xff1a;42,000軌道高度&#xff1a;340km - …

《深潛React列表渲染:調和算法與虛擬DOM Diff的優化深解》

當用戶在內容平臺無限滑動&#xff0c;或是在管理系統中處理成百上千條數據時&#xff0c;每一次無卡頓的交互&#xff0c;都是調和算法與虛擬DOM Diff機制協同工作的成果。理解這兩者的底層邏輯&#xff0c;不僅是性能優化的鑰匙&#xff0c;更是從“使用框架”到“理解框架”…

自動化與配置管理工具 ——Ansible

一、Ansible 概述1.1 核心特性Ansible 是一款開源的自動化運維工具&#xff0c;采用無代理&#xff08;Agentless&#xff09;架構&#xff0c;通過 SSH 協議實現對遠程節點的管理。其核心特性包括&#xff1a;無代理架構&#xff1a;被管理節點無需安裝代理軟件&#xff0c;降…

Effective C++ 條款18:讓接口容易被正確使用,不易被誤用

Effective C 條款18&#xff1a;讓接口容易被正確使用&#xff0c;不易被誤用核心思想&#xff1a;設計接口時&#xff0c;應使正確使用方式直觀自然&#xff0c;同時通過類型系統、行為約束等手段主動預防常見錯誤&#xff0c;減少用戶犯錯的可能性。 ?? 1. 接口誤用的常見陷…

nodejs讀寫文件

1.讀文件 node有很多模塊&#xff0c;可在node模塊查看相應模塊&#xff1b; var fsrequire(fs)fs.readFile(./src/a.doc,utf8,function(err,data){// 如果發生錯誤&#xff0c;data是undefined 如果成功 err為null console.log(err); console.log(data); }) 2.寫文件 var…

ConcurrentHashMapRedis實現二級緩存

1. 為什么使用ConcurrentHashMap&#xff1f;在Java中&#xff0c;ConcurrentHashMap 是一個線程安全且高效的哈希表實現&#xff0c;廣泛用于高并發場景。將其用作一級緩存的原因主要包括以下幾點&#xff1a;1.1. 線程安全性ConcurrentHashMap 是線程安全的&#xff0c;支持多…

Mysql集群技術

實驗在RHEL7中做&#xff0c;因為9中缺少了一個關鍵的高可用組件環境&#xff1a;兩臺數據庫&#xff0c;內存和CPU要多一點主流是MYSQL&#xff08;開源&#xff09;&#xff0c;Oracle收費較貴RHEL7中直接用make編譯是有問題的&#xff0c;所以需要要gcc工具做好前置準備&…

自動駕駛嵌入式軟件工程師面試題【持續更新】

文章目錄前言請描述 CAN 幀的基本結構&#xff08;包括標識符、數據字段、CRC 等&#xff09;描述 WebSocket 協議的基本工作流程&#xff08;包括握手、數據幀結構&#xff09;請說明如何實現 WebSocket 連接的心跳機制以檢測連接狀態&#xff0c;并描述在斷開后如何通過重連策…

vue(5)-組件

一.組件三大組成部分&#xff08;結構/樣式/邏輯&#xff09;&#xff08;1&#xff09;組件樣式沖突用scoped全局樣式在組件中起全局作用&#xff0c;局部樣式可以加scoped屬性來只作用于當前組件圖中只給baseone加這個樣式&#xff0c;就在baseone中style加scoped&#xff08…