1、实现strlen
2、实现strcpy
3 、实现strcat
4 、实现strstr
3 、实现strcat
4 、实现strstr
5、实现strcmp
6 、实现strchr
6 、实现strchr
#include<stdio.h> #include<string.h> #include<assert.h> #include<Windows.h> //模拟实现strlen的三种方式 //方式1:计数器方式 int my_strlen1(const char *str) { int count = 0; while (*str){ count++; str++; } return count; } //方式2:递归(不创建临时变量) int my_strlen2(const char *str) { if (!*str){ return 0; } return 1 + my_strlen2(str + 1); } //方式3:指针-指针 int my_strlen3(const char *str) { char *p = str; while (*p){ p++; } return p - str;//尾-头 } //模拟实现strcpy char *my_strcpy(char *des, const char *src) { assert(des); assert(src);//判断是否为空 char *ret = des; while (*des = *src){//保证src的'\0'也被复制 des++; src++; } return ret;//返回拷贝后的des } //模拟实现strcat char *my_strcat(char *des, const char *src) { assert(des); assert(src); char *ret = des; while (*des){//从des的'\0'开始复制 des++; } while (*des = *src){ des++; src++; } return ret;//返回拼接完成后的des } //模拟实现strstr(子串查找) char *my_strstr(const char *des, const char *src) { assert(des); assert(src); char *d = (char *)des; char *ds = NULL; char *s = (char *)src; while (*d){//如果在此字符串des已经判断到了'\0',则退出,未找到子串 ds = d; s = src; while (*s && *ds && *ds == *s){ ds++; s++; } if (!*s){//如果在此*s == 0,则子串已找到 return d; } if (!*ds){//如果在此*ds == 0,则des已经找完,未找到子串 return NULL; } //走到这说明while循环是因为*ds!=*s跳出的 d++; } } //模拟实现strcmp int *my_strcmp(const char *src, const char *des) { assert(des); assert(src); int ret = 0; while (!(ret = *(unsigned char *)src - *(unsigned char *)des) && *des){//将较大几率不成立的条件放置前面判断 //此处判断条件,没有判断*src为空:(原因)当判断条件1成立时说明src和des相等,此时会去判断条件2 //当条件2成立,则退出,此时代表ret == 0(也可以说明此时src == 0;(src-des == 0)) src++; des++; } if (ret < 0){ ret = -1; } else if (ret > 0){ ret = 1; } else{ ret = 0; } return ret; } //查找字符串s中首次出现字符c的位置 char *my_strchr(const char *str, char ch) { assert(str); char *tmp = str; while (*tmp != '\0' && *tmp != ch){ tmp++; } if (*tmp == ch){ return tmp; } else{ return NULL; } } int main() { /*char *str = "anxsdfj12"; printf("%d\n", my_strlen1(str)); printf("%d\n", my_strlen2(str)); printf("%d\n", my_strlen3(str));*/ /*char *src = "qweasdz765"; char des[20]; printf("%s\n", my_strcpy(des, src));*/ /*char *src = "hjklg123"; char des[20] = "asdf"; printf("%s\n", my_strcat(des, src));*/ /*char *src = "asdf"; char *des = "qwasuitasdfcxnz"; printf("%s\n", my_strstr(des, src));*/ /*char *src = "abcdefg"; char *des = "abcdekg"; printf("%d\n", my_strcmp(src, des));*/ char *str = "safjqla"; char ch = 'q'; printf("%s\n", my_strchr(str, ch)); system("pause"); return 0; }