網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
C語(yǔ)言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實(shí)現(xiàn)_C 語(yǔ)言
作者:三天曬網(wǎng)且從不打魚(yú) ? 更新時(shí)間: 2022-11-01 編程語(yǔ)言前言:
今天來(lái)實(shí)現(xiàn)strlen、strcpy、strcmp、strcat、strstr三個(gè)比較常見(jiàn)的字符串操作函數(shù),具體實(shí)現(xiàn)如下。
strlen
C 庫(kù)函數(shù) size_t strlen(const char *str) 計(jì)算字符串 str 的長(zhǎng)度,直到空結(jié)束字符,但不包括空結(jié)束字符。
int my_strlen(const char* p) {
int size = 0;
//找到末尾停止
while (*p != '\0') {
p++;
size++;
}
return size;
}
strcpy
C 庫(kù)函數(shù) char *strcpy(char *dest, const char *src) 把 src 所指向的字符串復(fù)制到 dest。需要注意的是如果目標(biāo)數(shù)組 dest 不夠大,而源字符串的長(zhǎng)度又太長(zhǎng),可能會(huì)造成緩沖溢出的情況。
char* my_strcpy(char* dest, const char* src) {
//判斷傳入是否為空
if (src == NULL || dest == NULL) {
return dest;
}
char* pdest = dest;
//不為空打印
while (*src != '\0') {
*pdest = *src;
pdest++;
src++;
}
//末尾加'\0'
*pdest = '\0';
return dest;
}
strcmp
C 庫(kù)函數(shù) int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串進(jìn)行比較。
int my_strcmp(const char* str1, const char* str2) {
//一直往后查找直到其中一個(gè)結(jié)尾或者他們二者不相等為止
while (*str1 != '\0' && *str2 != '\0' && (*str1 == *str2)) {
str1++;
str2++;
}
return *str1 - *str2;
}
strcat
C 庫(kù)函數(shù) char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的結(jié)尾。
char* my_strcat(char* dest, const char* src) {
char* pdest = dest;
//pdset先走到末尾
while (*pdest != '\0') {
pdest++;
}
//鏈接
while (*src != '\0') {
*pdest = *src;
pdest++;
src++;
}
//加結(jié)尾標(biāo)志'\0'
*pdest = '\0';
return dest;
}
strstr
C 庫(kù)函數(shù) char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出現(xiàn)字符串 needle 的位置,不包含終止符 ‘\0’。
char* my_strstr(const char* dest, const char* src) {
//斷言非空
assert(dest && src);
while (*dest != '\0') {
//記錄dest src初始位置
char* pdest = dest;
char* psrc = src;
//若相等則繼續(xù)比較
while (*pdest == *psrc || *psrc == '\0') {
//如果psrc=='\0' 則說(shuō)明找到子串
if (*psrc == '\0') {
return dest;
}
//psrc 未到 \0 則繼續(xù)比較是否相等
pdest++;
psrc++;
}
dest++;
}
return NULL;
}
原文鏈接:https://blog.csdn.net/qq_53130059/article/details/125567532
相關(guān)推薦
- 2022-07-23 python雙向鏈表實(shí)例詳解_python
- 2022-02-19 數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言鏈表的實(shí)現(xiàn)介紹_C 語(yǔ)言
- 2022-05-10 Element-ui 中 Select 選擇器下拉框樣式及輸入框樣式的修改問(wèn)題(背景色透明與懸停背景
- 2022-12-05 Spark中的數(shù)據(jù)讀取保存和累加器實(shí)例詳解_相關(guān)技巧
- 2023-04-11 pandas中實(shí)現(xiàn)將相同ID的字符串進(jìn)行合并_python
- 2022-06-30 golang實(shí)現(xiàn)簡(jiǎn)單rpc調(diào)用過(guò)程解析_Golang
- 2022-11-09 CSS元素定位
- 2022-06-18 Elasticsearches之python使用及Django與Flask集成示例_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支