😎博客昵称:博客小梦
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!
😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
前言🙌
哈喽各位友友们😊,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!😘我仅已此文,和大家分享你是真的“C”——各种实用string类库函数的详细实现过程。都是精华内容,可不要错过哟!!!😍😍😍
一、求字符串长度的库函数(strlen) 😊
strlen大概样子: 😊
1、计数器实现版本😘
详细代码展示:
#include<stdio.h> int my_strlen(const char * ptr) { int count = 0; while (*ptr != '\0') { count++; ptr++; } return count; } int main() { char arr[10] = "abcdef"; printf("%d", my_strlen(arr)); return 0; }
2、指针-指针的方式实现😘
详细代码展示: 😍
#include<stdio.h> int my_strlen(const char* ptr) { char* p = ptr; while (*p != '\0') { p++; } return p - ptr; } int main() { char arr[10] = "abcdef"; printf("%d", my_strlen(arr)); return 0; }
3、不能创建临时变量递归实现版本😘
详细代码展示: 😍
#include<stdio.h> int my_strlen(const char* ptr) { if (*ptr == '\0') return 0; return my_strlen(ptr + 1) + 1; } int main() { char arr[10] = "abcdef"; printf("%d", my_strlen(arr)); return 0; }
程序运行结果:
二、模拟实现strcpy😊
strcpy的大概样子
详细代码展示: 😍
#include<stdio.h> #include<assert.h> char* my_strcpy(char* des, const char* src) { assert(des && src); char* p = des; while (*des++ = *src++ ) { ; } return p; } int main() { char arr1[10] = "abcdeffg"; char arr2[10] = { 0 }; printf("%s", my_strcpy(arr2, arr1)); return 0; }
程序运行结果:
三、模拟实现strcmp😊
strcmp的大概样子:
strcmp的返回值实现细节:
详细代码展示: 😍
int my_strcmp(const char* str1, const char* str2) { assert(str1, str2); while (*str1 || *str2) { if (*str1 == *str2) { str1++; str2++; } else { return *str1 - *str2; } } return 0; } int main() { char arr1[10] = "abbbbb"; char arr2[10] = "abeb"; printf("%d", my_strcmp(arr1, arr2)); return 0; }
程序运行结果:
四、模拟实现strcat😊
strcat的大概样子:
详细代码展示: 😍
#include<stdio.h> #include<assert.h> char* my_strcat(char* dest, const char* src) { assert(dest && src); char* p = dest; while (*dest != '\0') { dest++; } while (*dest++ = *src++) { ; } return p; } int main() { char arr1[10] = "hello "; char arr2[10] = "bit"; printf("%s", my_strcat(arr1, arr2)); return 0; }
程序运行结果:
五、模拟实现strstr😊
strstr函数的大概样子:
详细代码展示: 😍
#include<stdio.h> #include<assert.h> #include<string.h> char* my_strstr(const char* arr1, const char* arr2) { assert(arr1 && arr2); char* s1 = NULL; char* s2 = NULL; char* start = arr1; while (*start && (strlen(arr1) > strlen(arr2))) { s1 = start; s2 = arr2; while (*s1 && *s2 && *s1 == *s2) { s1++; s2++; } if (*s2 == '\0') return start; start++; } return NULL; } int main() { char arr1[100] = "abcdebcddf"; char arr2[100] = "debc"; printf("%s", my_strstr(arr1, arr2)); return 0; }
程序运行结果:
总结撒花💞
本篇文章旨在分享冒泡排序的改良。希望大家通过阅读此文有所收获!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘