C常用函数的实现

转载,直接贴代码

int strcmp2(const char *s1, const char*s2) {
    int ret;
    for (; *s1++ == *s2++; ret = *s1 - *s2) {
        if (*s1 == '\0')
            break;
    }
    if (ret < 0)
        ret = -1;
    else if (ret > 0)
        ret = 1;

    return ret;
}

int strcmp3(char *src, char *sub) {
    int ret;
    while (!(ret = *src - *sub) && *sub) {
        ++src;
        ++sub;
    }
    if (ret < 0)
        ret = -1;
    else if (ret > 0)
        ret = 1;

    return ret;
}

char *strncpy2(char *dest, const char *src, size_t count) {
    char *str = dest;
    for (; (count > 0)&&(*dest = *src); count--, dest++, src++)
        ;
    return str;
}

char * strncpy1(char *dest, const char *src, size_t count) {
    char *address = dest;
    assert((dest != NULL && src != NULL && count > 1));
    while (count-- > 0 && (*dest++ = *src++) != '\0');
    return address;
}

char * strcpy1(char *strDest, const char *strSrc)
 {
    char *address = strDest;
    assert((strDest != NULL) && (strSrc != NULL));
    printf("1=%s 2=%s\n", strDest, strSrc);
    while ((*strDest++ = *strSrc++) != '\0') {
        printf("1=%s 2=%s\n", strDest, strSrc);
    }
    printf("function str=%s\n", address);
    return address;
}

int strlen1(const char *str) //输入参数const
 {
    int len = 0;
    assert(str != NULL); //断言字符串地址非0
    while ((*str++) != '\0') {
        printf("len=%d str=%s\n", len, str);
        len++;
    }
    printf("\n\nlen=%d str=%s\n", len, str);
    return len;

}

int strlen2(const char *src) {
    int len = 0;
    assert(src != NULL);
    while (*src++ != '\0') {
        len++;
    }
    return len;
}

int mystrlen(const char *p) {
    int t;
    printf("p=[%s]\n", p);
    if (*p) {
        t = mystrlen(p + 1) + 1;
        printf("t=%d\n", t);
        return t;
    }
    printf("last!!!!!!!!\n");
    return 0;
}

int mystrlen1(const char *p) {
    printf("\nfirst=0x%x last=0x%x\n", p, strchr(p, '\0'));
    return strchr(p, '\0') - p;
}

int mystrlen2(const char *p) {
    return (printf("%s", p));
}

int mystrlen3(const char *p) {
    if (0 == p[0]) return 0;
    if (0 == p[1]) return 1;
    if (0 == p[2]) return 2;
    if (0 == p[3]) return 3;
    for (*(int*) p = 4; '\0' != p[*(int*) p]; ++(*(int*) p)) {
    }
    return *(int*) p;
}

int x(int n) {
    if (n <= 3) {
        printf("laset n=%d\n", n);
        return 1;
    } else {
        printf("n=%d \n", n);
        return x(n - 2) + x(n - 4) + 1;
    }
}

int calcone(unsigned char s) {
    int ret = 0;
    while (s) {
        ret++;
        s &= s - 1;
    }
    return ret;
}

size_t func(unsigned char x) {
    printf("0x=0x%x >>1=0x%x\n", x, x >> 1);
    x = (x & 0x55) + ((x >> 1) & 0x55);
    printf("0x=0x%x >>2=0x%x\n", x, x >> 2);
    x = (x & 0x33) + ((x >> 2) & 0x33);
    printf("0x33=0x%x\n", x);
    x = (x & 0x0f) + ((x >> 4) & 0x0f);
    printf("0x0f=0x%x\n", x);
    return x;
}

int MaxSub(const int A[], int N) {
    int ThisSum = 0;
    int MaxSum = 0;
    int i;

    for (i = 0; i < N; i++) {
        ThisSum += A[i];
        if (ThisSum > MaxSum)
            MaxSum = ThisSum;
        else if (ThisSum < 0)
            ThisSum = 0;
    }
    return MaxSum;
}

void shuzu(int a[], int b[][2]) {
    printf("a=%d b=%d!\n", a[0], b[0][0]);
    return;
}

int count(int n) {
    if (1 == n) {
        printf("1\n");
        return 1;
    } else if (2 == n) {
        printf("2\n");
        return 2;
    } else {
        printf("%d%d%d\n", n, n, n);
        return count(n - 1) + count(n - 2);
    }
}

char * ReverseStringSlow(char * aStr) {
    int i, j;
    int len = strlen(aStr);
    char * ptemp = (char*) malloc(len);
    for (i = len - 1, j = 0; i >= 0; --i, ++j) {
        ptemp[j] = aStr[i];
    }
    strncpy(aStr, ptemp, len);
    free(ptemp);
    return aStr;
}

char * ReverseStringFast(char * aStr) {
    int i;
    int len = strlen(aStr);
    char temp = '\0';
    for (i = 0; i < len / 2; ++i) {
        printf("i=%d len-i-1=%d\n", i, len - i - 1);
        temp = aStr[i];
        aStr[i] = aStr[len - i - 1];
        aStr[len - i - 1] = temp;
    }
    return aStr;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值