strcpy函数重写:
bool My_strcpy(char *dst,char *src) {
if (dst == nullptr || src == nullptr)
return false;
while (*src != 0) {
*dst = *src;
dst++;
src++;
}
*dst = 0;
return true;
}
strcmp函数重写:
int My_strcmp(char *str1, char *str2) {
if (str1 == nullptr || str2 == nullptr)
return -2;
while (*str1&&*str2) {
if (*str1 > *str2)
return 1;
else if (*str1 < *str2)
return -1;
str1++; str2++;
}
if (*str1 == 0 && *str2 != 0)
return -1;
else if (*str2 == 0 && *str1 != 0)
return 1;
return 0;
}
strcat函数重写:
bool My_strcat(char *dst, char *src) {
if(dst==nullptr ||src==nullptr)
return false;
while (*dst)
dst++;
while (*src) {
*dst = *src;
dst++;
src++;
}
*dst = 0;
return true;
}
strchr函数重写:
(返回值是待查找字符出现位置之后的字符串)
char* My_strchr(char *src,char dst) {
if (src == nullptr || dst == 0)
return nullptr;
while (*src) {
if (*src == dst) {
src++;
return src;
}
src++;
}
return nullptr;
}
strstr函数重写:
第一种方法:
char * My_strstr1(char *src, char *dst) {
if (src == nullptr || dst == nullptr)
return nullptr;
char * tmp_src = src;
char * tmp_dst = dst;
while (*tmp_dst) {
tmp_src = src;
tmp_dst = dst;
char * flag = tmp_dst;
while (*tmp_dst == *tmp_src && *tmp_dst) {
tmp_dst++; tmp_src++;
}
if (*tmp_src == 0)
return flag;
else if (*tmp_dst == 0)
return nullptr;
dst++;
}
return nullptr;
}
第二种方法(朴素的模式匹配算法):
char * My_strstr2(char *src, char *dst) {
if (src == nullptr || dst == nullptr)
return nullptr;
char * tmp_src = src;
char * tmp_dst = dst;
int i = 0, j = 0;
while (i <= strlen(src) - 1 && j <= strlen(dst) - 1) {
if (src[i] == dst[j]) {
i++;
j++;
}
else {
i = 0;
j = j - i + 1;
}
}
if (src[i] == 0)
return dst + j - strlen(src);
return nullptr;
}
有什么不对的地方希望大家及时指出,一起交流进步,后续我会写一些关于数据结构的代码供大家参考~