C语言-指针练习

1、函数 strcpy

拷贝字符串

char*  my_strcpy(char* p1,const char* p2) {
   
    char* ret = p1;
    assert(p1 && p2);
    while (*p1++  =  *p2++) {
        ;
    }
    return ret;
}

拷贝部分字符串

char* my_strncpy(char* p1, const char* p2,int len) {
    int count = 0;
    char* ret = p1;
    assert(p1 && p2);
    while (*p1++ = *p2++ ) {
        count++;
        if (count==len)
        {
            break;
        }
    }
    return ret;
}

2、函数strcat

追加字符串

char* my_strcat(char* p1,const char* p2) {
    assert(p1 && p2);
    char* ret = p1;
    while (*p1!='\0') {
        p1++;
       
    }
    printf("这还%c\n", *p1);
    while (*p1++ = *p2++)
    {
        printf("%c\n", *p2);
    }
    return ret;
}

3、函数srtcmp

比较两个字符串的大小

先比较是否相同再比较两个acssll值

在遇到\0之前如果长度等于限制就提前跳出

这个函数的\0是取决于要拷贝的函数arr2

int my_strcmp(const char*p1,const char*p2) {
    assert(p1 && p2);
    while (*p1==*p2)
    {
        if (*p1=='/0')
        {
            return 0;
        }
        p1++;
        p2++;
    }
    if (*p1>*p2)
    {
        return 1;
    }
    else {
        return -1;
    }

4、函数strstr

计算函数包含的地址位置

代码奇妙之处在于用了指针接受了地址,cur变化的条件是找到了a和b不相等的节点

本来我打算循环找不到就跳过这一段,但没考虑到部分不符合,后来再有符合也匹配不到

例如abbaaabcd

aabcd

如果ab出现了两次并不影响

但是aaa!=aab也会跳过

连着两个a都跳过bcd就不等于abcd但实际却不是

int my_strstr(char* p1,char* p2) {
    assert(p1 && p2);
    char* cur = p1;
    char* s1;
    char* s2;
    int cont = 0;
    if (*p2=='\0')
    {
        return *p1;
      
    }
    while (*cur)
    {
        s1 = cur;
        s2 = p2;
        while((*s1==*s2)&&(*s2!='\0')&&(* s1!='\0'))

        {       
            s1++;
            s2++;         
        }
        if (*s2 == '\0')
        {
            return cont;    
        }
            cur++;
            cont++;  
       
    }

    return NULL;
   
      
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值