怎么仿写C语言string.h头文件检验字符串函数
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要讲解了"怎么仿写C语言string.h头文件检验字符串函数",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么仿写C语言string.h头文
千家信息网最后更新 2025年02月02日怎么仿写C语言string.h头文件检验字符串函数
这篇文章主要讲解了"怎么仿写C语言string.h头文件检验字符串函数",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么仿写C语言string.h头文件检验字符串函数"吧!
c语言string.h头文件字符串检验函数仿写
所需头文件:stdio.h
,stdlib.h
, string.h
strlen字符串求长度
int strlen_my(const char* src_str){ if (NULL == src_str) { return -1; } const char* p = src_str; while (*p != '\0') { p++; } return p - &(src_str[0]);}//递归int strlen_my2(const char* src_str){ if (src_str == NULL) return -1; if (*src_str) { return strlen_my2(src_str + 1) + 1; } else { return 0; }} int main(){ const char* p = "hello"; printf("%d \n",strlen_my(p)); return 0;}
strcmp / strncmp字符串比较
int strcmp_my(const char* str_a, const char* str_b){ while ((*str_a != '\0' || *str_b != '\0') && *str_a == *str_b ) { str_a++; str_b++; } return *str_a - *str_b > 0 ? 1 : (*str_a - * str_b < 0 ? -1 : 0);}int strcmp_my2(const char* str_a, const char* str_b){ int sub = 0; while ((sub = *str_a - *str_b) == 0 && *str_a++ && *str_b++); //先赋值,指针再++ return sub > 0 ? 1 : (sub < 0 ? -1 : 0);} int strncmp_my(const char* str_a, const char* str_b, size_t front_len){ while (--front_len && *str_a != '\0' && *str_b != '\0' && *str_a == *str_b) { str_a++; str_b++; } return *str_a - *str_b > 0 ? 1 : (*str_a - *str_b < 0 ? -1 : 0);} int main(){ const char* p = "hella"; const char* q = "hell"; printf("%d \n", strncmp_my(p, q, 4)); return 0;}
strchr / strrchr 字符串中查找字符ch
第一个出现的字符ch
//strchr 返回字符串中第一个出现的字符chchar* strchr_my(const char* src_str, char ch){ if (src_str == NULL) { return NULL; } while (*src_str != '\0' && *src_str != ch) { src_str++; } return *src_str == '\0' ? NULL : src_str;} int main(){ const char* p = "hello"; p = strchr_my(p, 'e'); if (p == NULL) return 0; printf("%c\n", *p);}
最后一个出现的字符ch
//strrchr查找字符串中最后一个出现的字母chchar* strrchr_my(const char* src_str, char ch){ if (NULL == src_str) return NULL; const char* p = src_str + strlen(src_str) - 1; while ((p - src_str) >= 0 && *p != ch) { p--; } if (p - src_str == -1) { return NULL; } return p;} int main(){ const char* p = "hello"; //p = strchr_my(p, 'q'); p = strrchr_my(p, 'l'); if (p == NULL) return 0; printf("%c\n", *p);}
strstr 字符串匹配:src_str中查找des_str,返回匹配的起始位置,没有为NULL(BF算法)
char* strstr_my(const char* src_str, const char* des_str){ if (NULL == src_str || NULL == des_str) { return NULL; } int len_src = strlen(src_str); int len_des = strlen(des_str); int i = 0; //src_str int j = 0; //des_str while (i < len_src && j < len_des) { if (src_str[i] == des_str[j]) { i++; j++; } else { i = i - j + 1; j = 0; } } if (j == len_des) { return src_str + i - j; } return NULL;} int main(){ const char* p = "hello"; const char* q = "llo"; const char* rt = strstr_my(p, q); if (rt != NULL) { printf("%s\n", rt); return 0; } return 0;}
strcpy / strncpy字符串拷贝
char* strcpy_my(char* des_str, const char* src_str){ if (des_str == NULL || src_str == NULL) return NULL; char* p = des_str; while (*src_str != '\0') { *p++ = *src_str++; } *p = '\0'; return des_str;} char* strncpy_my(char* des_str, const char* src_str, size_t len){ if (des_str == NULL || src_str == NULL || len <= 0) return NULL; char* p = des_str; //源字符串实际长度 int cur_len = strlen(src_str) <= len ? len : strlen(src_str); while (cur_len--) { *p++ = *src_str++; } *p = '\0'; return des_str;} int main(){ const char* p = "hello"; char q[10] = {0}; if (strncpy_my(q, p, 1) != NULL) { printf("%s\n", q); } return 0;}
strcat / strncat字符串的粘贴
char* strcat_my(char* des_str, const char* src_str){ if (des_str == NULL || src_str == NULL) return NULL; int len_des = strlen(des_str); char* p = des_str + len_des; while (*src_str != '\0') { *p++ = *src_str++; } return des_str;} char* strncat_my(char* des_str, const char* src_str, size_t len){ if (des_str == NULL || src_str == NULL || len < 0) return NULL; int len_des = strlen(des_str); char* p = des_str + len_des; while (len--) { *p++ = *src_str++; } return des_str;} int main(){ char p[20] = "hello"; const char* q = "world"; printf("p = %s\n", p); printf("q = %s\n", q); if (strncat_my(p, q, 3) != NULL) { printf("p = %s\n", p); } printf("q = %s\n", q); return 0;}
strdup 字符串申请堆区空间存放字符串的副本
char* strdup_my(const char* src_str){ if (NULL == src_str) return NULL; char* newspace = (char*)malloc((strlen(src_str) + 1 ) * sizeof(char)); if (newspace == NULL) return NULL; int i = 0; while (*src_str != '\0') { newspace[i++] = *src_str++; } newspace[i] = '\0'; return newspace;}int main(){ const char* p = "hello"; char* q = strdup_my(p); if (q != NULL) { printf("%s\n", q); free(q); q == NULL; } return 0;}
感谢各位的阅读,以上就是"怎么仿写C语言string.h头文件检验字符串函数"的内容了,经过本文的学习后,相信大家对怎么仿写C语言string.h头文件检验字符串函数这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
字符
字符串
文件
函数
语言
检验
学习
内容
长度
位置
副本
字母
实际
就是
思路
情况
拷贝
文章
更多
知识
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中公网络安全实习内容
文件传送到服务器上用什么工具好
21世纪互联网科技时代
华为服务器安全认证失败
新宜农网络技术有限公司风控
7日杀服务器配置文件汉化
周村资产管理软件开发公司
dota2一直连接协调服务器
司法警察计算机网络技术
网络安全风险自查评估报告
融合软件开发
信息网络安全问题
平谷区正规软件开发特点
75小说软件开发
暑期居家网络安全自护
魔兽服务器端
服务器管理mod
华为数据库工程师
盛大的服务器
我的世界服务器登录
网络安全民企有哪些
龙岗区网络技术转移联系方式
监狱网络安全管理干嘛
易德网络技术工程有限公司
民航空管信息和网络安全管理系统
国产数据库行业的发展的报告
人肉数据库怎么搭建
服务器类型数据库引擎啥意思
杭州定制化国产服务器怎么选择
怎样看我的电脑的服务器地址