模拟实现库函数

来源:互联网 发布:开战传奇网站源码 编辑:程序博客网 时间:2024/06/05 18:31

1.strcpy() 

功能:用源字符串替换目标字符串

#include <stdio.h>#include <assert.h>char* my_strcpy(char *dst,const char *src){assert(dst);assert(src);while(*dst++=*src++){;}return dst; }int main(){char arr1[] = "abcdef";char arr2[] = "hello";my_strcpy(arr1,arr2);printf("%s\n",arr1);return 0;}

2.strcat()

功能:将源字符串复制到目标字符串,从目标字符串的'\0'开始复制。

#include <stdio.h>#include <assert.h>char* my_strcat(char *dst,const char *src){assert(dst);assert(src);while(*dst){dst++;}while(*dst++ = *src++){;}return dst; }int main(){char arr1[20] = "abcdef";char arr2[] = "hello";my_strcat(arr1,arr2);printf("%s\n",arr1);return 0;}
3.strstr()

功能:在目标字符串中找源字符串,如果存在返回目标字符串的起始位置,如果不存在返回空指针。

#include <stdio.h>#include <assert.h>char* my_strstr(const char *dst,const char *src){const char *cur =  dst;assert(cur);assert(src);while(*cur){const char *s1 = cur;const char *s2 = src;while((*s1)&&(*s2)&&*s1==*s2){s1++;s2++;}if(!*s2)return (char *)cur;cur++;}return NULL; }int main(){char arr1[20] = "abcdefghi";char arr2[] = "fgh";char *ret = my_strstr(arr1,arr2);printf("%s\n",ret);return 0;}

4.strchr()

功能:在目标字符串中找源字符,如果存在返回目标字符串的起始位置,如果不存在返回空指针。

#include <stdio.h>#include <assert.h>char* my_strstr(const char *dst,int ch){assert(dst);while(*dst){      if(*dst==ch)  {  return (char*)dst;  }  dst++; }return NULL; }int main(){char arr1[20] = "abcdefghi";char ch = 'a';char *ret = my_strstr(arr1,ch);printf("%s\n",ret);return 0;}
注意以上的函数返回值和参数列表,返回值char*方便链式访问,返回值为int的,方便调用处使用,参数列表中的限定,体现程序设计中的严谨

5.strcmp()

功能:进行两个字符串的比较,如果第一个字符串和第二个字符串大于关系,返回1,小于关系,返回-1,等于关系返回0。

#include <stdio.h>#include <assert.h>int my_strcmp(const char *str1,const char *str2){assert(str1);assert(str2);while(*str1==*str2){if((*str1=='\0')&&(*str2=='\0'))return 0;str1++;str2++;}if(*str1>*str2)return 1;elsereturn -1;return NULL; }int main(){char arr1[] = "abcd";char arr2[] = "abc";int ret = my_strcmp(arr1,arr2);printf("%d\n",ret);return 0;}


6.memcpy()

功能:给目标字符串复制指定个字节大小的源字符串

#include <stdio.h>#include <assert.h>void* my_memcpy(void *dest,const void *src,int count){//强制转换成字符,copy一定是一个字节一个字节的完成char * pdest = dest;const char * psrc = src;assert(pdest);assert(src);//仍热可以做相应次数的运算while(count--){*pdest++ = *psrc++;}return dest;}int main(){int arr1[] = {1,2,3,4,5};int arr2[] = {6,7,8,9,0};int sz = sizeof(arr2[0]);my_memcpy(arr1,arr2,sz);return 0;}

7.strncpy()

功能:给目标字符串复制指定个数的源字符串

char* my_strncpy(char *dest, const char *sour, size_t count ){char *p = dest;assert(dest);assert(sour);       while(count--){      *p++ = *sour++;}return dest;}

7.strncat()

功能:给目标字符串‘\0’后复制指定个数的源字符串


char* my_strncat(char *dest, const char *sour, size_t count ){char *p = dest;assert(dest);assert(sour);while(*p!='\0'){p++;}while(count--){*p++=*sour++;}return dest;}


8.strncmp()

功能:两个字符串指定个数比大小

int my_strncmp(const char*str1, const char*str2, size_t  n)  {  assert(str1);  assert(str2);  while (n--)  {  if (*str1 == *str2)  {  str1++;  str2++;  }  else  {  if ((*str1-*str2)<0)  return -1;  else  return 1;  }  }  return 0;  }