怎么仿写C语言string.h头文件检验字符串函数
发表于:2025-11-17 作者:千家信息网编辑
千家信息网最后更新 2025年11月17日,这篇文章主要讲解了"怎么仿写C语言string.h头文件检验字符串函数",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么仿写C语言string.h头文
千家信息网最后更新 2025年11月17日怎么仿写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安全错误
数据库的锁怎样保障安全
lol手游各服务器数据能迁移么
上虞区网络安全宣传
aix数据库建连很慢
路由器重置后dns服务器无反应
服务器未响应是网络原因吗
表单和数据库怎么连接的
长春网络安全课程费用多少
星球庄园软件开发商如何赢利
开展网络安全形势与警示教育
彩票行业软件开发
金山区工商软件开发信息中心
易语言服务器外网映射
锐捷网络安全教材
大型公司服务器多少钱
英雄联盟那个服务器在河北
扬州专业服务器工厂
查看数据库中所有数据表信息
我的世界烹饪大赛服务器
数据库怎么改成默认值
服务器性能配置依据
软件开发项目自查自整总结
09年塔式服务器
代理服务器 快
大学校园网络安全保护
高一数据库填空题
软件开发中的沟通
11日国家网络安全会议实况
北京网络技术转让供应商
网络安全重大利好
福州市水利局网络安全