網(wǎng)站首頁 編程語言 正文
實現(xiàn)字符串庫函數(shù)功能
有些時候我們可能會被限制無法使用庫函數(shù),這個時候我們需要編寫自己的庫函數(shù)。但了解了字符串庫函數(shù)的功能之后,想要實現(xiàn)并不困難,今天我們用數(shù)組和循環(huán)來簡單實現(xiàn)幾個字符串庫函數(shù)的功能。
1.strlen函數(shù)
strlen函數(shù)使用來求字符串長度的,遇到\0就會停止,并返回字符串的長度,接下來根據(jù)這個特性來編寫一下我們自己的strlen
int my_strlen(char string[]) { int count= 0; while (string[count] != NULL) { count++; } return count; }//也可以將while的判斷條件改為string[count]
有些小伙伴應(yīng)該知道遞歸的實現(xiàn),但是這里涉及了指針的內(nèi)容,我就不教大家實現(xiàn)了
2.strcmp函數(shù)
strcmp字符串比較函數(shù),對兩個字符串進(jìn)行比較,相當(dāng)返回0,前一個字符串大于后一個字符串會返回大于0的數(shù),小于則返回小于0的數(shù),至于具體返回多少,則需要看編譯器。
在實現(xiàn)strcmp功能之前,我們需要了解它的機(jī)制,strcmp是一個字符一個字符的比較ASCII值的
int my_strcmp(char string1[], char string2[]) { int i = 0; //當(dāng)兩個字符串都沒有達(dá)到末端時,繼續(xù)比較 while ((string1[i] == string2[i]) && string1[i] && string2[i]) i++; return string1[i] - string2[i]; //當(dāng)兩個字符串指向的字符不一樣或者到達(dá)終點時返回差值 }
一個簡單的while循環(huán)就能達(dá)到目的
3.strcpy函數(shù)
字符串拷貝函數(shù),將后一個字符串拷貝到前一個字符串中,我們需要保證目的地足夠大
void my_strcpy(char string1[50], char string2[]) { int i = 0; while (string1[i++] = string2[i++]); } //這里利用了賦值表達(dá)式的特性,直接進(jìn)行賦值,當(dāng)string[i]為\0時賦值完循環(huán)自動停止 //當(dāng)然這個程序并不是完美的,根據(jù)strcpy的返回值我們還可以這樣修改 char* my_strcpy(char string1[50], char string2[]) { int i = 0; while (string1[i++] = string2[i++]); return string1; }//返回目的地的起始地址
4.strcat函數(shù)
strcat字符串追加,在一個字符串之后追加一個新的字符串,如果以strcpy的角度理解就是以第一個字符串的\0位置為起始地址進(jìn)行字符串拷貝,那么接下來就很簡單了
char* my_strcat(char string1[50], char string2[]) { int i = -1; while (string1[++i]);//循環(huán)停止時i指向\0 int j = 0; while (string1[i++] = string2[j++]); //與strcpy同理 return string1; }
5.strupr函數(shù)
strupr字符串大寫函數(shù),將所有字符串中的小寫字母都變成大寫,我們只需要根據(jù)ASCII值就可以簡單實現(xiàn)
char*my_strupr(char string[]) { int i = 0; while (string[i]) { //當(dāng)string[i]指向\0時循環(huán)停止 if (string[i] >= 'a' && string[i] <= 'z') string[i] -= 32; i++; } return string; }
6.strlwr函數(shù)
和strupr對應(yīng),這是字符串小寫函數(shù),把大寫轉(zhuǎn)成小寫,只需要對上面的代碼簡單一改就可以
char*my_strlwr(char string[]) { int i = 0; while (string[i]) { //當(dāng)string[i]指向\0時循環(huán)停止 if (string[i] >= 'A' && string[i] <= 'Z') string[i] += 32; i++; } return string; }
總結(jié)
原文鏈接:https://blog.csdn.net/weixin_62753802/article/details/122269533
相關(guān)推薦
- 2022-12-05 Python中的int函數(shù)使用_python
- 2022-09-23 Golang分布式應(yīng)用定時任務(wù)示例詳解_Golang
- 2022-11-06 python分析inkscape路徑數(shù)據(jù)方案簡單介紹_python
- 2022-01-19 webpack5 熱更新無響應(yīng)
- 2022-10-07 C++函數(shù)指針與指針函數(shù)有哪些關(guān)系和區(qū)別_C 語言
- 2022-06-15 C語言詳解實現(xiàn)字符菱形的方法_C 語言
- 2022-07-15 VBScript編寫Windows防止鎖屏腳本程序_vbs
- 2022-09-19 Nginx配置Tcp負(fù)載均衡的方法_nginx
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支