網(wǎng)站首頁 編程語言 正文
C語言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實現(xiàn)_C 語言
作者:三天曬網(wǎng)且從不打魚 ? 更新時間: 2022-11-01 編程語言前言:
今天來實現(xiàn)strlen、strcpy、strcmp、strcat、strstr三個比較常見的字符串操作函數(shù),具體實現(xiàn)如下。
strlen
C 庫函數(shù) size_t strlen(const char *str) 計算字符串 str 的長度,直到空結(jié)束字符,但不包括空結(jié)束字符。
int my_strlen(const char* p) {
int size = 0;
//找到末尾停止
while (*p != '\0') {
p++;
size++;
}
return size;
}
strcpy
C 庫函數(shù) char *strcpy(char *dest, const char *src) 把 src 所指向的字符串復(fù)制到 dest。需要注意的是如果目標數(shù)組 dest 不夠大,而源字符串的長度又太長,可能會造成緩沖溢出的情況。
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 庫函數(shù) int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串進行比較。
int my_strcmp(const char* str1, const char* str2) {
//一直往后查找直到其中一個結(jié)尾或者他們二者不相等為止
while (*str1 != '\0' && *str2 != '\0' && (*str1 == *str2)) {
str1++;
str2++;
}
return *str1 - *str2;
}
strcat
C 庫函數(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é)尾標志'\0'
*pdest = '\0';
return dest;
}
strstr
C 庫函數(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' 則說明找到子串
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-28 Redis基本數(shù)據(jù)類型哈希Hash常用操作命令_Redis
- 2022-06-12 go實現(xiàn)grpc四種數(shù)據(jù)流模式_Golang
- 2022-03-27 3個適合新手練習(xí)的python小游戲_python
- 2021-12-20 ES6 Number 數(shù)值的擴展 0.1 + 0.2 === 0.3 居然是false
- 2023-07-02 oracle實現(xiàn)根據(jù)字段分組排序,取其第一條數(shù)據(jù)_oracle
- 2022-05-25 Flutter實現(xiàn)倒計時功能_Android
- 2022-11-24 Android開發(fā)使用Message對象分發(fā)必備知識點詳解_Android
- 2022-08-30 MongoDB數(shù)據(jù)庫權(quán)限管理詳解_MongoDB
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細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之認證信息的處理
- Spring Security之認證過濾器
- 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被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支