strncmp、strncpy、strncat、strlen库函数的实现

来源:互联网 发布:淘宝代销怎么刷销量 编辑:程序博客网 时间:2024/04/30 07:14
  1 #include <unistd.h>
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4 
  5 //字符串比较函数的实现
  6 int my_strncmp(const char *s1,const char *s2,size_t n){
  7 //判断参数是否给对,避免段错误
  8    if(s1==NULL||s2==NULL)printf("param error!\n"),exit(-1);
  9    if(*s1==*s2&&--n){//一个一个字符的比较,比较n次
 10       s1++;
 11       s2++;
 12    }
 13    if(*s1>*s2)
 14       return 1;
 15    else if(*s1<*s2)
 16       return -1;
 17    else
 18       return 0;
 19 
 20 }
 21 
 22 
 23 //字符串复制函数的实现
 24 char * my_strncpy(char* des,const char* src,size_t n){
 25 if(des==NULL||src==NULL)printf("param error!\n"),exit(-1);
 26 else{
 27   char *tmp=des;
 28    int i=n;
 29   while(n--&&(*tmp++=*src++)!='\0'/*&&--n*/){};//此处"--"放在n前面则会少复制一个字符,如果放在后面则可以

 30    *tmp='\0';

31    return des;
 32 }
 33 }
 34 //字符串拼接函数的实现
 35 char *my_strncat(char *des, const char *src, size_t n){
 36 if(des==NULL||src==NULL)printf("param error!\n"),exit(-1);
 37 char *tmp = des;
 38 if (n) {
 39 //先移到des字符串的最后一个字符
 40 while (*tmp)
 41       tmp++;
 42    //从最后一个字符开始赋值
 43    while ((*tmp++ = *src++) != 0) {
 44       if (--n == 0) {
 45          *tmp = '\0';
 46          break;
 47       }
 48    }
 49    }
 50    return des;
 51 }
 52 
 53 int my_strlen(char *str){
 54    int count=0;
 55    while(*str++!='\0'){
 56       count++;
 57    }
 58    return count;

 59 }
 60 
 61 int main(){
 62    char des[36];
 63    printf("deslen=%d\n",sizeof(des));
 64    char *src="hhahaha";
 65    my_strncpy(des,src,5);
 66    printf("%s\n",des);
 67    src="hpllo world";
 68 
 69    my_strncat(des,src,4);
 70    printf("des=%s\n",des);
 71    printf("src=%s\n",src);
 72 
 73    int cmp=my_strncmp(des,src,7);
 74    printf("cmp=%d\n",cmp);
 75 
 76    int n=my_strlen(src);
 77    printf("length=%d\n",n);
 78 
 79 }

原创粉丝点击