脆皮之“字符函數與字符串函數”寶典

hello,大家好呀,感覺我之前有偷偷摸魚了,今天又開始學習啦。加油!!!
在這里插入圖片描述

文章目錄

  • 1. 字符分類函數
  • 2. 字符轉換函數
  • 3. strlen的使用和模擬實現
    • 3.1 strlen 的使用
    • 3.1 strlen 的模擬
      • 1.計算器方法
      • 2.指針-指針的方法
      • 3.遞歸的方法
  • 4. strcpy的使用和模擬實現
  • 5. strcat的使用和模擬實現
  • 6. strcmp的使用和模擬實現
  • 7. strncpy函數的使用
  • 8. strncat函數的使用
  • 9. strncmp函數的使用
  • 10. strstr的使用和模擬實現
  • 11. strtok函數的使用
  • 12. strerror函數的使用

1. 字符分類函數

C語言中有一系列的函數是專門做字符分類的,且這些函數在使用時都需要包含頭文件:ctype.h

在這里插入圖片描述

這些函數的使用大同小異,我舉其中的一個例子:

從上圖可以看出,函數islower是用來判斷是否為小寫字母,我們可以在cplusplus搜索islower函數,它給出的是:如果是小寫字母,則返回非0值;如果不是小寫字母,則返回0.

int main()
{int c = islower('A');int q = islower('a');printf("c=%d\n", c);printf("q=%d\n", q);return 0;//打印結果是:c=0;q=2
}

練習寫一個代碼:將字符串中的小寫字母轉大寫,其他字符不變。(在學習字符轉換函數之后有另外一種方式,大家可以嘗試一下)

#include<stdio.h>
#include<ctype.h>
int main()
{char arr[] = "I am very sad." ;int i = 0;while (arr[i] != '\0'){if (islower(arr[i])){arr[i] = arr[i] - 32;}i++;}//再將字符串輸出,看是否變成大寫printf("%s\n", arr);return 0;
}

2. 字符轉換函數

C語言提供了2個字符轉換函數:
int tolower ( int c ); ------- 轉成小寫--------- //將參數傳進去的大寫字母轉小寫
int toupper ( int c );------- 轉成大寫----------//將參數傳進去的小寫字母轉大寫
int c的意思是傳入一個字符(字符的本質就是ascll碼值),int tolower的意思是返回值為整數

int main()
{char ch = tolower('A');printf("%c\n", ch);char hh = toupper('a');printf("%c\n", hh);
}

之前小寫轉大寫可以將if語句里面改掉

int main()
{char arr[] = "I am very sad." ;int i = 0;while (arr[i] != '\0'){if (islower(arr[i])){arr[i] = toupper(arr[i]);}i++;}//再將字符串輸出,看是否變成大寫printf("%s\n", arr);return 0;
}

3. strlen的使用和模擬實現

3.1 strlen 的使用

1.使用strlen需要包含頭文件:string.h
2.字符串以’\0’ 作為結束標志。

  • 比如:“abc” 其實就是‘a’ ‘b’ ‘c’ ‘\0’,一共4個字符。但是strlen只統計’\0‘之前的字符個數。(不包含’\0’)
  • 如果字符數組中是char arr[]={‘a’,‘b’,‘c’};的話,則是沒有\0的,什么時候遇到\0不確定。
int main()
{char arr[] = "aaattt";size_t len = strlen(arr);printf("%d\n", len);//6char qqq[]={'a','b'};size_t lee = strlen(qqq);printf("%d\n",lee);//隨機值return 0;
}

3.strlen的返回值是size_t(即無符號整數)

int main()
{char ch1[] = "abc";char ch2[] = "abcdef";if (strlen(ch1) - strlen(ch2) < 0)//3         -      6{printf("ch1<ch2");}else{printf("ch1>ch2");}
}
//最終的結果是ch1>ch2

3-6=-3,小于0,為什么輸出是大于?

在這里說明,strlen的返回值是size_t,無符號整數-無符號整數=還是無符號整數,所以strlen(ch1) - strlen(ch1)的結果其實>0,所以輸出>。

如果非要比較,可以將strlen的返回值強制類型轉換為int,(int)strlen(ch1)-(int)strlen(ch2)。或者直接比較: if (strlen(ch1) < strlen(ch2) )

3.1 strlen 的模擬

1.計算器方法

(1.) 這是最初的版本,之后優化。

size_t my_strlen(char* str)
{int count = 0;while (*str != '\0'){count++;//個數+1str++;//下一個元素的地址}return count;
}
int main()
{char ch[] = "aaaqqq";size_t len = my_strlen(ch);//傳數組傳的是數組名(這里代表的是數組首元素地址)printf("%d\n", len);
}

(2.)1.萬一指針是空指針呢?我們先用斷言判斷一下
2.我們只是想遍歷一遍數組的每個元素,找到\0,并不希望有人將元素修改了,所以用const修飾*ch

#include<assert.h>
size_t my_strlen(const char* str)//用指針變量來接收地址
{int count = 0;assert(str != NULL);while (*str != '\0'){count++;//個數+1str++;//下一個元素的地址}return count;
}
int main()
{char ch[] = "aaaqqq";size_t len = my_strlen(ch);//傳數組傳的是數組名(這里代表的是數組首元素地址)printf("%d\n", len);
}

2.指針-指針的方法

用起始地址-\0的地址=就是中間的元素個數

這幾種方法int main函數里的內容都一樣,之后就不再展示,只展示my_strlen函數里的內容

size_t my_strlen(const char* str)
{int count = 0;assert(str != '\0');int start = str;//這里str還是起始元素的地址while (*str != '\0'){//通過這個循環,使得str里面放的是\0的地址str++;}int end = str;return end - start;
}

3.遞歸的方法

在這里插入圖片描述

size_t my_strlen(const char* str)
{if (*str != '\0')return 1 + my_strlen(str + 1);elsereturn 0;
}

4. strcpy的使用和模擬實現

5. strcat的使用和模擬實現

6. strcmp的使用和模擬實現

7. strncpy函數的使用

8. strncat函數的使用

9. strncmp函數的使用

10. strstr的使用和模擬實現

11. strtok函數的使用

12. strerror函數的使用

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

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

相關文章

Python的shutil模塊探索,文件操作的瑞士軍刀

hello&#xff0c;大家好&#xff0c;我是一點&#xff0c;專注于Python編程&#xff0c;如果你也對感Python感興趣&#xff0c;歡迎關注交流。 希望可以持續更新一些有意思的文章&#xff0c;如果覺得還不錯&#xff0c;歡迎點贊關注&#xff0c;有啥想說的&#xff0c;可以留…

每周刷題第三期

個人主頁&#xff1a;星紜-CSDN博客 系列文章專欄&#xff1a;Python 踏上取經路&#xff0c;比抵達靈山更重要&#xff01;一起努力一起進步&#xff01; 目錄 題目一&#xff1a;環形鏈表 題目二&#xff1a;刪除有序數組中的重復項 題目三&#xff1a;有效的括號 題…

從左上角到右下角的最小距離和

題目描述&#xff1a;給定一個二維數組matrix&#xff0c;一個人必須從左上角出發&#xff0c;最后到達右下角&#xff0c;沿途只可以向下或者向右走&#xff0c;沿途的數字都累加就是距離累加和&#xff0c;返回最小距離累加和。 way&#xff1a;無他&#xff0c;dp[i] [j]表…

《隊列》

描述 學校體操隊到操場集合&#xff0c;排成每行2人&#xff0c;最后多出1人;排成每行3人&#xff0c;也多出1人。分別排成每行4、5、6人&#xff0c;都多出1人。當排成每行7人時&#xff0c;正好不多,求校體操隊至少多少人。 輸入描述 無 輸出描述 滿足要求的人數 樣例輸入…

Python語法學習之 - 生成器表達式(Generator Expression)

第一次見這樣的語法 本人之前一直是Java工程師&#xff0c;最近接觸了一個Python項目&#xff0c;第一次看到如下的代碼&#xff1a; i sum(letter in target_arr for letter in source_arr)這條語句是計算source 與 target 數組中有幾個單詞是相同的。 當我第一眼看到這樣…

shell遍歷路徑所有文件并把列表寫成字符串遍歷

1. ls dir/* | tr ‘\n’ ’ ’ 換行替換成空格 你可以使用 ls 命令和 tr 命令來將文件列表根據空格拼接起來成一個字符串。以下是一個示例&#xff1a; ls dir/* | tr \n 解釋 ls dir/*&#xff1a;列出 dir 目錄下的所有文件。tr \n &#xff1a;將所有的換行符&#xf…

ChatGPT生成常見面試題【面試準備】

ChatGPT生成常見面試題【面試準備】 前言版權ChatGPT生成常見面試題【面試準備】MySQL面試問題與回答1. 數據庫連接與操作2. 索引和查詢優化3. 事務管理4. 索引是什么&#xff1f;為什么使用索引可以提高查詢性能&#xff1f;如何在MySQL中創建索引&#xff1f;5. SQL查詢優化有…

Varjo XR-4功能詳解:由凝視驅動的XR自動對焦相機系統

Varjo是XR市場中擁有領先技術的虛擬現實設備供應商&#xff0c;其將可變焦距攝像機直通系統帶入到虛擬和混合現實場景中。在本篇文章中&#xff0c;Varjo的技術工程師維爾蒂莫寧詳細介紹了這項在Varjo XR-4焦點版中投入應用的技術。 對可變焦距光學系統的需求 目前所有其他XR頭…

WPF之容器標簽之Canvas布局標簽

Canvas: 定義一個區域&#xff0c;可在其中使用相對于 Canvas 區域的坐標以顯式方式來定位子元素。 實例 可以在子標簽使用Canvas屬性設置定位 <Canvas Width"500" Height"300"><StackPanel Width"100" Height"100"Backgro…

網頁抓取之requests庫的使用

Python網絡數據采集利器 - Requests庫的使用指南 簡介 在Python網絡爬蟲領域,優秀的第三方庫Requests可謂是必學的重要工具。它提供了相當人性化的API,讓我們能夠用極其簡潔的代碼發送HTTP/HTTPS請求,并且自動處理cookies、headers、編碼等諸多繁瑣細節,大大減輕了網頁抓取的…

【pdb的使用方法】

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、 pdb 是什么&#xff1f;二、基本用法1.啟動 PDB 調試器&#xff1a;2.單步執行代碼&#xff1a;3.查看變量值&#xff1a;4.退出調試器&#xff1a; 三、高級用…

指數分布的理解,推導與應用

指數分布的定義 在浙大版的教材中&#xff0c;指數分布的定義如下&#xff1a; 若連續型的隨機變量 X X X的概率密度為&#xff1a; f ( x ) { 1 θ e ? x θ , x>0 0 , 其他 f(x) \begin{cases} \frac{1}{\theta} e^{-\frac{x}{\theta}}, & \text{x>0}\\ 0, &a…

mvn編譯所有單元測試報錯OOM

org.mockito.exceptions.base.MockitoException: Cannot instantiate InjectMocks field named ‘productLogic’ of type ‘class .ProductLogic’. You haven’t provided the instance at field declaration so I tried to construct the instance. However the constructo…

Python正則表達式與Excel文件名批量匹配技術文章

目錄 引言 正則表達式基礎 Python中的re模塊 Excel文件名批量匹配案例 常見問題與解決方案 結論 引言 在現代辦公環境中&#xff0c;Excel文件幾乎成為了數據分析和處理的標配工具。由于Excel文件可能包含大量的數據和信息&#xff0c;因此&#xff0c;對Excel文件的命名…

在aspNetCore中 使用System.Text.Json的定制功能, 將定制化的json返回給前端

C# 默認大寫, 而大部分的前端默認小寫, 這時候可以如此配置: builder.Services.AddControllers().AddJsonOptions((opt) > {opt.JsonSerializerOptions.PropertyNamingPolicy System.Text.Json.JsonNamingPolicy.CamelCase;opt.JsonSerializerOptions.WriteIndented true…

DSPF網絡類型實驗1

對R6配置 對R1配置 對R2 對R3 對R4 對R5 對R1R2R3R4R5加用戶 環回處理 然后開始配置缺省 R1有兩個下一跳 3&#xff0c;4&#xff0c;5同R2 然后對R1 dynamic動態 對R2 手寫 把注冊加上 register R3同R2處理

機柜里面的設備有哪些

一、服務器 服務器是機柜中最常見的設備之一。它們通常被用于存儲和運行數據、應用程序和服務。不同的服務器通常使用不同的操作系統和處理器架構&#xff0c;以滿足不同的需求。服務器可以使用冗余電源和冗余存儲空間等措施&#xff0c;以確保數據安全和可靠性。 二、交換機 交…

刪除鏈表的倒數第N個節點-力扣

第一種方法是使用前后指針&#xff0c;前指針先向前走n1步&#xff0c;然后前后指針同時向前&#xff0c;當前指針指向NULL時&#xff0c;后指針正好指向需要刪除的節點的前一個節點&#xff0c;操作后指針刪除即可。 代碼如下&#xff1a; /*** Definition for singly-linked…

醫學圖像分割

論文&#xff1a;Medical Image Segmentation Using Deep Learning: A Survey 參考&#xff1a;[醫學圖像分割綜述] Medical Image Segmentation Using Deep Learning: A Survey-CSDN博客 一、背景 特征表示的困難&#xff1a;模糊、噪聲、對比度低--->CNN屬于語義分割&a…