库函数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 }

 

posted @ 2021-02-26 01:14  天哥的小屋  阅读(70)  评论(0)    收藏  举报