嵌入式Linux系統編程 — 4.5 strcmp、strchr 等函數實現字符串比較與查找

目錄

1 字符串比較

1.1 strcmp() 函數

1.2 strncmp() 函數

1.3 示例程序

2 字符串查找?

2.1 strchr() 函數

2.2 strrchr() 函數

2.3 strstr() 函數

2.4 strpbrk() 函數

2.5 示例程序


1 字符串比較

strcmp()strncmp() 函數是C語言標準庫中用于比較兩個字符串的函數。

1.1 strcmp() 函數

strcmp 進行字符串比較,主要是通過比較字符串中的字符對應的 ASCII 碼值, strcmp 會根據 ASCII 編碼依次比較 str1 和 str2 的每一個字符,直到出現了不同的字符,或者某一字符串已經到達末尾(遇見了字符串結束字符' \0 ')。函數原型如下:

#include <string.h>int strcmp(const char *str1, const char *str2);

參數:兩個字符串 str1str2?

1.2 strncmp() 函數

strncmp()與 strcmp()函數一樣,也用于對字符串進行比較操作,但最多比較前 n 個字符, strncmp()函數原型如下所示:

int strncmp(const char *str1, const char *str2, size_t n);

?參數:兩個字符串 str1str2?

這兩個函數都接受指針作為參數,指向要比較的字符串。strcmp() 比較兩個完整的字符串,而 strncmp() 只比較每個字符串的前 n 個字符。兩個函數的返回值如下:

  • 返回?0?如果兩個字符串相等。
  • 返回小于?0?的值如果第一個字符串在字典序上小于第二個字符串。
  • 返回大于?0?的值如果第一個字符串在字典序上大于第二個字符串。

1.3 示例程序

下面的示例程序使用 strcmp()strncmp() 函數來比較兩個用戶輸入的字符串。

#include <stdio.h>
#include <string.h>#define MAX_STR_LEN 100 // 定義字符串的最大長度int main() 
{char str1[MAX_STR_LEN], str2[MAX_STR_LEN]; // 存儲用戶輸入的兩個字符串int n; // 存儲用戶輸入的參數n,用于strncmp()比較的字符數// 獲取用戶輸入的第一個字符串printf("請輸入第一個字符串:");fgets(str1, MAX_STR_LEN, stdin);str1[strcspn(str1, "\n")] = 0; // 去除末尾的換行符// 獲取用戶輸入的第二個字符串printf("請輸入第二個字符串:");fgets(str2, MAX_STR_LEN, stdin);str2[strcspn(str2, "\n")] = 0; // 去除末尾的換行符// 獲取用戶輸入的參數nprintf("請輸入要比較的字符數n:");scanf("%d", &n);// 確保n不會超過字符串的最大長度n = n > MAX_STR_LEN ? MAX_STR_LEN : n;// 使用strcmp()函數比較兩個完整字符串int strcmp_result = strcmp(str1, str2);printf("使用strcmp()比較兩個完整字符串的結果:");if (strcmp_result == 0) {printf("兩個字符串相等。\n");} else if (strcmp_result < 0) {printf("第一個字符串小于第二個字符串。\n");} else {printf("第一個字符串大于第二個字符串。\n");}// 使用strncmp()函數比較兩個字符串的前n個字符int strncmp_result = strncmp(str1, str2, n);printf("使用strncmp()比較兩個字符串的前%d個字符的結果:", n);if (strncmp_result == 0) {printf("兩個字符串的前%d個字符相等。\n", n);} else if (strncmp_result < 0) {printf("第一個字符串的前%d個字符小于第二個字符串的前%d個字符。\n", n, n);} else {printf("第一個字符串的前%d個字符大于第二個字符串的前%d個字符。\n", n, n);}return 0;
}

程序首先使用 strcmp() 對兩個完整字符串進行比較,然后使用 strncmp() 對兩個字符串的前 n 個字符進行比較。運行結果如下:

2 字符串查找?

字符串查找在平時的編程當中也是一種很常見的操作,譬如從一個給定的字符串當中查找某一個字符或者一個字符串,并獲取它的位置。 C 語言函數庫中也提供了一些用于字符串查找的函數,包括 strchr()、strrchr()、 strstr()、 strpbrk()、 index()以及 rindex()等。下面是每個函數的作用和原型:

index()rindex()已被標準化的新函數取代,并且可能在某些編譯器中不可用或在未來的C標準中被移除。

2.1 strchr() 函數

strchr() 函數在字符串中查找第一次出現指定字符的位置。函數原型如下:

#include <string.h>char *strchr(const char *s, int c);
  • s:要搜索的字符串。
  • c:要查找的字符。

2.2 strrchr() 函數

strrchr() 函數從字符串末尾開始查找最后一次出現指定字符的位置,參數和返回值與?strchr()?相同,但是搜索方向是從末尾到開頭。。函數原型如下:

#include <string.h>char *strrchr(const char *s, int c);

  • s:要搜索的字符串。
  • c:要查找的字符

2.3 strstr() 函數

strstr() 函數在字符串中查找第一次出現子字符串的位置。函數原型:

char *strstr(const char *haystack, const char *needle);
  • haystack:要搜索的字符串。
  • needle:要查找的子字符串。

2.4 strpbrk() 函數

strpbrk() 函數在字符串中查找任意字符在另一字符串中首次出現的位置。函數原型如下:

char *strpbrk(const char *s1, const char *s2);
  • s1:要搜索的字符串。
  • s2:包含要查找的字符集的字符串。

2.5 示例程序

下面的示例程序使用 strchr()strrchr()strstr()strpbrk() 函數來查找字符或子字符串,并使用條件語句檢查是否找到了它們。如果找到了,我們計算字符或子字符串的位置,并打印出來。

#include <stdio.h>
#include <string.h>#define MAX_STR_LEN 100int main() {char str[MAX_STR_LEN]; // 用戶輸入的源字符串char charToFind; // 用戶希望查找的字符char substr[MAX_STR_LEN]; // 用戶希望查找的子字符串char charsToBreak[MAX_STR_LEN]; // 用戶希望用于strpbrk的字符集// 初始化字符串memset(str, 0, MAX_STR_LEN);memset(substr, 0, MAX_STR_LEN);memset(charsToBreak, 0, MAX_STR_LEN);// 獲取用戶輸入的源字符串printf("請輸入源字符串:");fgets(str, MAX_STR_LEN, stdin);str[strcspn(str, "\n")] = 0; // 去除末尾的換行符// 獲取用戶希望查找的字符printf("請輸入要查找的字符:");scanf("%c", &charToFind);scanf("%*c"); // 清除緩沖區中的換行符// 獲取用戶希望查找的子字符串printf("請輸入要查找的子字符串:");fgets(substr, MAX_STR_LEN, stdin);substr[strcspn(substr, "\n")] = 0; // 去除末尾的換行符// 獲取用戶希望用于strpbrk的字符集printf("請輸入用于strpbrk的字符集(例如: 'abc123'):");fgets(charsToBreak, MAX_STR_LEN, stdin);charsToBreak[strcspn(charsToBreak, "\n")] = 0; // 去除末尾的換行符// 使用strchr查找字符char *chrPos = strchr(str, charToFind);printf("strchr找到的位置:%s\n", chrPos ? "找到" : "未找到");if (chrPos) {printf("位置:%zu\n", chrPos - str + 1); // 輸出字符在字符串中的位置}// 使用strrchr從末尾查找字符chrPos = strrchr(str, charToFind);printf("strrchr找到的位置:%s\n", chrPos ? "找到" : "未找到");if (chrPos) {printf("位置:%zu\n", chrPos - str + 1); // 輸出字符在字符串中的位置}// 使用strstr查找子字符串chrPos = strstr(str, substr);printf("strstr找到的子字符串位置:%s\n", chrPos ? "找到" : "未找到");if (chrPos) {printf("位置:%zu\n", chrPos - str + 1); // 輸出子字符串在字符串中的位置}// 使用strpbrk查找任意字符在字符集中首次出現的位置chrPos = strpbrk(str, charsToBreak);printf("strpbrk找到的位置:%s\n", chrPos ? "找到" : "未找到");if (chrPos) {printf("位置:%zu\n", chrPos - str + 1); // 輸出字符在字符串中的位置}return 0;
}

函數運行結果如下:?

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

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

相關文章

經典排序算法詳解

目錄 創作不易&#xff0c;如對您有幫助&#xff0c;還望一鍵三連&#xff0c;謝謝&#xff01; 前言 學習目標&#xff1a; 直接插入排序 基本思想&#xff1a; 代碼 希爾排序&#xff1a; gap取值 代碼 特性總結 選擇排序 基本思想 代碼 堆排序 思想 代碼 冒…

[CTF]-PWN:mips反匯編工具,ida插件retdec的安裝

IDA是沒有辦法直接按F5來反匯編mips的匯編的&#xff0c;而較為復雜的函數直接看匯編不太現實&#xff0c;所以只能借用插件來反匯編 先配置環境&#xff0c;下載python3.4以上的版本&#xff0c;并將其加入到環境變量中 下載retdec 地址&#xff1a;Release v1.0-ida80 ava…

蘋果開發者證書申請流程

蘋果開發者證書申請流程&#xff1a; 1.Certificates 后面加號 2.iOS Distribution (App Store and Ad Hoc) 點擊continue 3.選擇Upload a Certificate Signing Request To manually generate a Certificate, you need a Certificate Signing Request (CSR…

Unity關于Addressables.Release釋放資源內存問題

前言 最近在編寫基于Addressables的資源管理器&#xff0c;對于資源釋放模塊配合MemoryProfiler進行了測試&#xff0c;下面總結下測試Addressables.Release的結論。 總結 使用Addressables.Release釋放資源時&#xff0c;通過MemoryProfiler檢查內存信息發現加載的內容還在…

多租戶與低代碼開發的應用:解鎖企業數字化轉型的無限可能

在數字化轉型的浪潮中&#xff0c;多租戶與低代碼開發已經成為推動企業快速、靈活、安全地構建和部署應用的關鍵技術。本文將深入探討這兩種技術的結合如何為企業帶來前所未有的變革和機遇。 多租戶架構&#xff1a;資源共享與隔離的藝術 多租戶架構&#xff0c;是一種高級的軟…

一文讓你簡單明了的知道云管理平臺的作用

隨著云計算的飛速發展&#xff0c;越來越多的企業實現了上云。因此云管理平臺也在云計算環境中扮演著至關重要的角色&#xff0c;在企業上云后充分發揮作用。今天我們小編就來為大家簡單講解一下云管平臺的作用。 一文讓你簡單明了的知道云管理平臺的作用 作用1、提高工作效率…

思考-生涯思考-GPT-5對人們的影響

GPT-5 一年半后發布&#xff1f;對此你有何期待&#xff1f; IT之家6月22日消息&#xff0c;在美國達特茅斯工程學院周四公布的采訪中&#xff0c;OpenAI首席技術官米拉穆拉蒂被問及GPT-5是否會在明年發布&#xff0c;給出了肯定答案并表示將在一年半后發布。此外&#xff0c;…

20240629 每日AI必讀資訊

&#x1f680; Google 深夜突襲&#xff0c;Gemma 2 狂卷 Llama 3 - Gemma2性能超越Llama3&#xff0c;提供9B和27B版本&#xff0c;性能接近70B模型但大小僅為其40% - Gemma2支持高效推理&#xff0c;單個GPU即可實現全精度推理&#xff0c;廣泛的硬件支持 - Gemma2兼容多種…

CMake之嵌套的CMakeLists

文章目錄 前言項目結構節點關系如何嵌套多個cmake示例程序cmake 總結 前言 在現代軟件開發中&#xff0c;CMake 是一個非常重要的工具&#xff0c;它允許開發者編寫可移植的構建腳本來管理項目。對于大型項目&#xff0c;通常會有多個模塊或子項目&#xff0c;這時候就需要用到…

2024年618各城市跨境電商戰況如何?

2024年618各城市 跨境電商戰況如何? 2024 城市“618”跨境戰績&#xff08;部分&#xff09; 2024年“618”期間&#xff0c;全國跨境電商交易額實現2,397.12億元&#xff0c;同比增長8.68%。從跨境商品來看&#xff0c;進口端&#xff0c;嬰童食品、美容美妝、營養保健等商…

numpy.random.seed()使用

import numpy as npnp.random.seed(2) # 生成隨機種子2 一次使用機會 作用在下一個隨機數生成的時候 a np.random.random() # 使用隨機種子2 b np.random.random() # 因為隨機種子使用完了 &#xff01; 這里使用默認按系統根據時間作為seed參數的隨機種子 print(a) # 隨…

手機取證基礎知識(一)

文章關鍵詞&#xff1a;手機取證、電子數據取證 手機取證&#xff0c;也稱為移動設備取證或智能手機取證&#xff0c;是數字取證的一個分支&#xff0c;專注于從智能手機和其他移動設備中提取、分析和呈現證據的過程。這項技術通常用于法律調查&#xff0c;尤其是在犯罪調查中…

關于 AI 音樂大模型的研究報告

摘要&#xff1a;本研究報告聚焦于近期上線的音樂大模型&#xff0c;探討其對音樂創作門檻的降低影響&#xff0c;分析其引發的關于音樂圈是否會被 AI 徹底顛覆的討論&#xff0c;以及深入研究與之相關的版權歸屬和創意產業在 AI 影響下的發展等問題。 一、引言 在過去的一個月…

JavaScript(1)——JS介紹

JS是什么 是一種運行在客戶端&#xff08;瀏覽器&#xff09;的編程語言&#xff0c;實現人機交互的效果 作用&#xff08;做什么&#xff09; 網頁特效&#xff08;監聽用戶的一些行為讓網頁做出對應的反饋&#xff09;表單驗證&#xff08;針對表單數據的合法性行為進行判…

PHP實戰:輕松實現商品庫存批量導入,高效管理不是夢!

在電商平臺上&#xff0c;批量導入商品庫存是一個常見的需求。通過批量導入&#xff0c;商家可以快速更新大量商品的庫存信息&#xff0c;提高工作效率。本文將介紹如何使用PHP編程語言實現這一功能&#xff0c;方便商家進行庫存管理。 首先&#xff0c;我們需要創建一個表格文…

[深度學習] 前饋神經網絡

前饋神經網絡&#xff08;Feedforward Neural Network, FFNN&#xff09;是人工神經網絡中最基本的類型&#xff0c;也是許多復雜神經網絡的基礎。它包括一個輸入層、一個或多個隱藏層和一個輸出層。以下是詳細介紹&#xff1a; 1. 結構 1. 輸入層&#xff08;Input Layer&am…

【Android 構建新工具】Bazel 構建Android項目

【Android 構建新工具】Bazel 構建Android項目 本文我們使用Bazel構建一個最簡單的Android項目。Bazel提供了編譯Android程序內置的方法,具體參考:Android Rules 1. 環境準備 Bazel只是編譯工具,不是真正的編譯器,所以還是需要Andorid開發的SD、NDK以及Android Studio,…

基于改進天鷹優化算法(IAO)優化支持向量機(SVM)數據分類預測(IAO-SVM)

改進天鷹優化算法(IAO)見&#xff1a;【智能優化算法】改進的AO算法(IAO)-CSDN博客 支持向量機(SVM)數據分類預測&#xff1a;基于支持向量機(SVM)的數據分類預測-CSDN博客 代碼原理 基于改進天鷹優化算法&#xff08;IAO&#xff09;優化支持向量機&#xff08;SVM&#xf…

uniapp獲取證書秘鑰、Android App備案獲取公鑰、簽名MD5值

一、 uniapp獲取證書秘鑰 打開uniapp開發者中心下載證書打開cmd輸入以下這段代碼&#xff0c;下載提供查看到的密鑰證書密碼就可以了&#xff01;下載證書在 java 環境下運行才可以 // your_alias 換成 證書詳情中的別名&#xff0c;your_keystore.keystore 改成自己的證書文件…

Splashtop 的屏幕錄制功能如何提高 IT 合規性

在當今的數字時代&#xff0c;隨著遠程辦公的普及以及監管要求和網絡安全威脅的加劇&#xff0c;IT 副總裁、首席信息官&#xff08;CIO&#xff09;等 IT 管理人員面臨著一系列獨特挑戰。 各組織在遠程支持運營中要全力維護合規性、提高安全性并堅持問責制&#xff0c;技術解…