库函数strcpy,strcat,strcmp,shrlen的实现
1 size_t mystrlen(char c[]) 2 { 3 int i=0; 4 while(c[i]!=0) 5 { 6 i++; 7 } 8 return i; 9 } 10 11 void mystrcpy(char a[],char b[]) 12 { 13 int i=0; 14 while(b[i]!=0) 15 { 16 a[i]=b[i]; 17 i++; 18 } 19 a[i]='\0'; 20 } 21 22 int mystrcmp(char a[],char b[]) 23 { 24 int i=0; 25 while(!(a[i]-b[i])&&a[i]&&b[i]) 26 { 27 i++; 28 } 29 if(a[i]-b[i]<0) 30 { 31 return -1; 32 }else if(a[i]-b[i]>0){ 33 return 1; 34 }else{ 35 return 0; 36 } 37 } 38 39 void mystrcat(char a[],char b[]) 40 { 41 int i=0,al; 42 al=mystrlen(a); 43 while(b[i]) 44 { 45 a[al]=b[i]; 46 i++; 47 al++; 48 } 49 a[al]='\0'; 50 }
1 // strcat的实现 2 char * strcat(char * dest, const char * src){ 3 assert(dest && src); 4 char * ret = dest; 5 // 找到dest的'\0'结尾符 6 while(*dest){ 7 dest++; 8 } 9 // 拷贝(while循环退出时,将结尾符'\0'也做了拷贝) 10 while(*dest++ = *src++){} 11 return ret; 12 } 13 14 // strcmp的实现 15 int strcmp(const char * str1, const char * str2){ 16 assert(str1 && str2); 17 // 找到首个不相等的字符 18 while(*str1 && *str2 && (*str1==*str2)){ 19 str1++; 20 str2++; 21 } 22 return *str1 - *str2; 23 } 24 25 // strcpy的实现 26 char * strcpy(char * dest, const char * src){ 27 assert(dest && src); 28 char * ret = dest; 29 30 // 内存拷贝的字节数 31 int count = strlen(src) + 1; 32 // 内存拷贝 33 if(dest <= src || (dest >= src + count)){ 34 // 拷贝方向:从低字节到高字节 35 while(count--){ 36 *dest++ = *src++; 37 } 38 }else{ 39 // 拷贝方向:从高字节向低字节 40 dest += (count -1); 41 src += (count -1); 42 while(count--){ 43 *dest--=*src--; 44 } 45 } 46 return ret; 47 } 48 49 //求字符串长度的函数 50 int my_strlen(const char* pStr) 51 { 52 assert(pStr != NULL); 53 int length = 0; 54 while (*pStr++ != '\0') 55 { 56 length++; 57 } 58 return length; 59 }