文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么仿写C语言string.h头文件检验字符串函数

2023-06-25 14:28

关注

这篇文章主要讲解了“怎么仿写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_strint 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头文件检验字符串函数这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯