欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > C语言常见字符串函数模拟实现一

C语言常见字符串函数模拟实现一

2024/11/18 7:43:44 来源:https://blog.csdn.net/m0_75122019/article/details/142407186  浏览:    关键词:C语言常见字符串函数模拟实现一

strlen模拟实现

重点:1.字符串已经'\0'作为结束标志,strlen返回的是字符串'\0'前面出现的字符个数(不包含'\0')

2.参数指向的字符串必须要以'\0'结束。

3.注意函数的返回值是size_t,是无符号的,加减是无法对比的。

模拟:

size_t my_strlen(const char* arr)
{size_t num = 0;while (*(arr++) != '\0'){num++;}return num;
}int main()
{char arr[] = "abcdef";printf("%zd\n", my_strlen(arr));
}

 strcpy模拟实现

重点:1.源字符串必须以'\0'结束

2.函数会将源字符串中的'\0'拷贝到目标空间

3.目标空间必须足够大,以确保能存放源字符串

4.目标空间必须可变

模拟:

char* my_strcpy(char* dest, const char* src)
{char* ret = dest;assert(dest && src);while (*dest++ = *src++){;}return ret;
}int main()
{char arr1[20];char arr2[] = "abcdef";printf("%s\n", my_strcpy(arr1, arr2));
}

strcat模拟实现

重点:1.源字符串必须以'\0'结束

2.目标空间必须足够大,能容纳源字符串的内容

3.目标空间必须可以修改

4.目标空间必须有'\0',函数找到'\0'开始追加

5.字符串不可以自己给自己追加,尽量不要。

模拟:

char* my_strcat(char* dest, const char* src)
{assert(dest && src);//断言char* ret = dest;/*while (*dest++){;}*///为什么不这么写,因为dest就不会在'\0'上了会在'\0'后面一位while (*dest){dest++;}while ((*dest++ = *src++)){;}return ret;
}int main()
{char arr1[20] = "abcd";char arr2[] = "ef";printf("%s\n", my_strcat(arr1, arr2));
}

strcmp模拟实现

重点:1.

2.比较对于位置上字符的大小(ASCLL值),不是长度。

模拟:

int my_strcmp(const char* str1, const char* str2)
{assert(str1 && str2);while (*str1 == *str2){if (*str1 == '\0'){return 0;//要相等代表两个字符串长度和对应的字符都一模一样}str1++;str2++;}return *str1 - *str2;
}int main()
{char arr1[] = "abcd";char arr2[] = "abce";if (my_strcmp(arr1, arr2) > 0){printf(">\n");}else if (my_strcmp(arr1, arr2) == 0){printf("==\n");}else{printf("<\n");}
}

strstr模拟实现

 模拟:

#include<stdio.h>
#include<assert.h>
//strstr函数模拟,在字符串中找字符串函数char* my_strstr(const char* arr1,const char* arr2)
{assert(arr1 && arr2);char* cp = arr1;//记录起点char* s1 = arr1;//遍历的指针char* s2 = arr2;if (!*s2)//如果源字符串什么都没有直接返回目标字符串{return arr1;}while (*cp++){s1 = cp;s2 = arr2;while ((*s1 == *s2) && *s1 && *s2)//'\0'停下{s1++;s2++;}if (!*s2){return cp;}}//其实这里还可以再简洁一点return NULL;
}int main()
{char arr1[] = "abbcdef";char arr2[] = "bbc";printf("%s\n", my_strstr(arr1, arr2));
}

补充:strstr函数模拟实现还有一种 KMP算法更适合,上面的这种写法还可以再修改,大家可以自己想想。 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com