实现c语言中的库函数(strlen strcpy strncpy strcat strncat strcmp strncmp)

经常听身边的朋友说去参加公司笔试时会遇到要求实现c语言中的库函数(strlen strcpy strncpy strcat strncat strcmp strncmp),有时会想不起来该如何写,那么我们今天就来实现下这几个库函数。( 如有错误,欢迎指出!!!)

1.strlen(字符串长度)

  1 size_t mystrlen(const char *str){
  2     if(str==NULL){   //也可以使用assert  assert(str!=NULL);但需要加assert.h头文件
  3         return -1;
  4     }   
  5     size_t cnt = 0;
  6     while(*str!='\0'){
  7         cnt++;
  8         str++;
  9     }   
 10     return cnt;
 11 } 
 12
 13
 14 int main(){
 15     char s[100] = "abcdefg";
 16     printf("库函数:%u\n",strlen(s));
 17     printf("自定义函数:%u\n",mystrlen(s));
 18     return 0;
 19 }

在这里插入图片描述
调用库函数与自定义函数比较,结果相同(注意:strlen所统计的字符串长度不包括结尾 的’\0’!)。

2.strcpy和strncpy

strcpy是将第二个字符串全部拷贝到第一个字符串中,如果第二个字符串长度小于第一个,则只第一个多出的部分不再显示。strncpy有三个参数,将第二个字符串的n位拷贝到第一个字符串。
char *mystrcpy(char *str_1,const char *str_2)
char *mystrncpy(char *str_1,const char *str_2,size_t n)

strcpy:

 15 char *mystrcpy(char *str_1,const char *str_2){
 16     if(str_1==NULL||str_2==NULL){
 17         return NULL;
 18     }
 19     char *pstr_1 = str_1;//后面程序会使指针偏移,所以先保存初始位置
 20     while(*str_2!='\0'){
 21         *str_1 = *str_2;;
 22         str_1++;
 23         str_2++;
 24     }
 25     *str_1 = '\0';
 26     return pstr_1;
 27 }
 28 
 29 int main(){
 30     char s1[100] = "hello world";
 31    char s2[100] = "hello java";
 32     printf("库函数:%s\n",strcpy(s1,s2));
 33     char s3[100] = "hello world";
 34     char s4[100] = "hello java";
 35     printf("自定义函数:%s\n",mystrcpy(s3,s4));

实现c语言中的库函数(strlen strcpy strncpy strcat strncat strcmp strncmp)_第1张图片

strncpy:

 29 char *mystrncpy(char *str_1,const char *str_2,size_t n){
 30     if(str_1==NULL||str_2==NULL){
 31         return NULL;
 32     }
 33     char *pstr_1 = str_1;//保存初始位置
 34     size_t i = 0;
 35     while(i<n&&*str_2!='\0'){
 36         *str_1 = *str_2;
 37         str_1++;
 38         str_2++;
 39         i++;
 40     }
 41     return pstr_1;
 42 
 43 }
 62 int main(){
 63     char s1[100] = "hello world";
 64     char s2[100] = "hello java hello python";
 65     printf("库函数:%s\n",strncpy(s1,s2,8));
 66     char s3[100] = "hello world";
 67     char s4[100] = "hello java hello python";
 68     printf("自定义函数:%s\n",mystrncpy(s3,s4,8));
 69     return 0;
 70 }
~              

在这里插入图片描述

3.strcat和strncat(字符串追加函数)

char *mystrcat(char *str_1,const char *str_2)
char *mystrncat(char *str_1,const char *str_2,size_t n)

strcat:

 44 char *mystrcat(char *str_1,const char *str_2){
 45     if(str_1==NULL||str_2==NULL){
 46         return NULL;
 47     }
 48     char *pstr_1 = str_1;//保存初始位置
 49     while(*str_1!='\0'){ //将str_1移到末尾
 50         str_1++;
 51     }
 52     while(*str_2!='\0'){
 53         *str_1 = *str_2;
 54         str_1++;
 55         str_2++;
 56     }
 57     *str_1 = '\0';
 58     return pstr_1;
 59 
 60 }
 61 
 62 int main(){
 63     char s1[100] = "hello ";
 64     char s2[100] = "world";
 65     printf("库函数:%s\n",strcat(s1,s2));
 66     char s3[100] = "hello ";
 67     char s4[100] = "world";
 68     printf("自定义函数:%s\n",mystrcat(s3,s4));
 69     return 0;
 70 }

实现c语言中的库函数(strlen strcpy strncpy strcat strncat strcmp strncmp)_第2张图片

strncat:

62 char *mystrncat(char *str_1,const char *str_2,size_t n){
 63     if(str_1==NULL||str_2==NULL){
 64         return NULL;
 65     }
 66     char *pstr_1 = str_1;//保存初始位置
 67     size_t i = 0;
 68     while(*str_1!='\0'){  //将str_1移到末尾
 69         str_1++;
 70     }
 71     while(i<n&&*str_2!='\0'){
 72         *str_1 = *str_2;
 73         str_1++;
 74         str_2++;
 75         i++;
 76     }
 77     *str_1 = '\0';
 78     return pstr_1;
 79 }
 80 int main(){
 81     char s1[100] = "hello ";
 82     char s2[100] = "world";
 83     printf("库函数:%s\n",strncat(s1,s2,2));
 84     char s3[100] = "hello ";
 85     char s4[100] = "world";
 86     printf("自定义函数:%s\n",mystrncat(s3,s4,2));
 87     return 0;
 88 }

在这里插入图片描述

4.strcmp和strncmp(字符串比较)

int mystrcmp(const char *str_1,const char *str_2)
int mystrncmp(const char *str_1,const char *str_2,size_t n)

strcmp:

 81 int mystrcmp(const char *str_1,const char *str_2){
 82     if(str_1==NULL||str_2==NULL){
 83         return -1;
 84     }
 85     while(*str_1!='\0'&&*str_2!='\0'&&*str_1==*str_2){
 86         str_1++;
 87         str_2++;
 88     }
 89     return *str_1 - *str_2;
 90 }
 91 int main(){
 92     char s1[100] = "hello";
 93     char s2[100] = "hellw";
 94     if(strcmp(s1,s2)==0){
 95         printf("库函数判断:相同\n");
 96     }else if(strcmp(s1,s2)>0){
 97         printf("库函数判断:s1>s2\n");
 98     }else{
 99         printf("库函数判断:s1);
100     }
101     if(mystrcmp(s1,s2)==0){
102         printf("自定义函数判断:相同\n");
103     }else if(mystrcmp(s1,s2)>0){
104         printf("自定义数判断:s1>s2\n");
105     }else{
106         printf("自定义函数判断:s1);
107     }
108 

在这里插入图片描述

strncmp:

 92 int mystrncmp(const char *str_1,const char *str_2,size_t n){
 93     if(str_1==NULL||str_2==NULL){
 94         return -1;
 95     }
 96     while(n>1&&*str_1!='\0'&&*str_2!='\0'&&*str_1==*str_2){//库函数1是起始位,不是0
 97         str_1++;
 98         str_2++;
 99         n--;
100     }
101     return *str_1 - *str_2;
102 }
103 int main(){
104     char s1[100] = "hellok";
105     char s2[100] = "hellow";
106     if(strncmp(s1,s2,5)==0){
107         printf("库函数判断:相同\n");
108     }else if(strncmp(s1,s2,5)>0){
109         printf("库函数判断:s1>s2\n");
110     }else{
111         printf("库函数判断:s1);
112     }
113     if(mystrncmp(s1,s2,5)==0){
114         printf("自定义函数判断:相同\n");
115     }else if(mystrncmp(s1,s2,5)>0){
116         printf("自定义数判断:s1>s2\n");
117     }else{
118         printf("自定义函数判断:s1);
119     }
120 
121     return 0;
122 }

实现c语言中的库函数(strlen strcpy strncpy strcat strncat strcmp strncmp)_第3张图片

你可能感兴趣的:(实现c语言中的库函数(strlen strcpy strncpy strcat strncat strcmp strncmp))