我是靠谱客的博主 舒服小笼包,最近开发中收集的这篇文章主要介绍字符串各种库函数的实现(strlen,strcpy,strcmp,strcat,strstr,memcpy)strlen的实现strcpy的实现strcmp的实现strcat的实现strstr的实现memcpy的实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • strlen的实现

有很多种方法这里用的为指针相减

int my_strlen(const char* str) {
assert(str != NULL);
char* p=str;
while (*p) {
p++;
}
return p - str;
}
  • strcpy的实现

char* my_strcpy(const char* src, char* dst) {
assert(src != NULL);
assert(dst != NULL);
char* ret = dst;
while (*dst++ = *src++);
return ret;
}
  • strcmp的实现

前者大于后者返回值为1,后者大于前者返回-1,相等返回0。

int my_strcmp(const char* str1, const char* str2) {
assert(str1 != NULL);
assert(str2 != NULL);
int ret = 0;
const unsigned char* s1 = (const unsigned char*)str1;
const unsigned char* s2 = (const unsigned char*)str2;
while (!(ret = *s1 - *s2) && *s1)
s1++, s2++;
if (ret > 0) {
return 1;
}
else if (ret < 0) {
return -1;
}
else
return 0;
}
  • strcat的实现

把src的内容拼接到dst原内容后面

char* my_strcat(char* dst, const char* src) {
assert(dst != NULL);
assert(src != NULL);
char* ret = dst;
while (*dst) {
dst++;
}
while (*dst++ = *src++);
return ret;
}
  • strstr的实现

定义了多个指针,str1为目标字符串,str2为子串,s1用来保存str1,s2用来保存str2,move用来往后指和str2比较

char* my_strstr(const char* str1, const char* str2) {
assert(str1 != NULL);
assert(str2 != NULL);
const char* s1 = str1;
const char* s2 = str2;
const char* move=NULL;
if (!*str2) {
return s1;
}
while (*s1) {
str2 = s2;
move = s1;
while (*str2 && *move && *str2++ == *move++) {
if (!*str2) {
return s1;
}
}
s1++;
}
return NULL;
}
  • memcpy的实现

注意指针定义的类型,这里实现不了内存重叠的问题。

void* my_memcpy(void* dst, const void* src, size_t count) {
assert(dst != NULL);
assert(src != NULL);
void* ret = dst;
if (!count) {
return dst;
}
unsigned char* _dst =(unsigned char*) dst;
unsigned char* _src = (unsigned char*)src;
while (count--) {
*_dst++ = *_src++;
}
return ret;
}

最后

以上就是舒服小笼包为你收集整理的字符串各种库函数的实现(strlen,strcpy,strcmp,strcat,strstr,memcpy)strlen的实现strcpy的实现strcmp的实现strcat的实现strstr的实现memcpy的实现的全部内容,希望文章能够帮你解决字符串各种库函数的实现(strlen,strcpy,strcmp,strcat,strstr,memcpy)strlen的实现strcpy的实现strcmp的实现strcat的实现strstr的实现memcpy的实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部