头图

重写部分C库函数只是为了提升我对代码的理解力和编程逻辑,以下代码仅提供参考,如果你有更好的建议欢迎提出。

字符串复制方法: 本质上是循环读取被复制数组src的每一个字符串,然后给目标数组dest依次赋值,直到'\0'结束符停止,完成字符串拷贝复制(被复制数组容量必须足够大,至少要大于目标数组容量,否则无法完成复制)。点击这里看详细介绍

// 字符串复制函数
char *mystrcpy(char *dest, const char *src) {
    char *dest_p = dest;
    const char *src_p = src;
    while (*src_p != '\0') {
        *dest_p = *src_p;
        dest_p++;
        src_p++;
    }
    *dest_p = '\0';
    return dest;
}

字符串长度计算方法: 一直遍历字符串的每一个字符,直到遍历到'\0'结束符,就停止计次,计次的次数就是字符串的长度(如果字符串中没有'\0'结束符,此函数可能会无限循环或计算出错)。点击这里看详细介绍

// 字符串长度计算函数
int mystrlen(char *str) {
    char *start = str;
    int len = 0;
    while (*start != '\0') {
       start++;
       len++;
    }
    return len;
}

字符串转小写方法: 使用循环去遍历字符串中的每一个字符,判断字符的ASCII码值是否在范围内,小写字母的ASCII码范围是: 97(a) - 122(z),大写字母的ASCII码范围是: 65(A) - 90(Z),大写字符转小写字符+32,小写字符转大写字符-32。点击这里看详细介绍

// 字符串转小写函数
char *mystrlwr(char *str) {
    char *start = str;
    while (*start != '\0') {
        int ascii = (int)*start;
        if(ascii >= 65 && ascii <= 90) {
            *start = (char)(ascii + 32);
        }
        start++;
    }
    return str;
}

实现方法参考上方

// 字符串转大写函数
char *mystrupr(char *str) {
    char *start = str;
    while (*start != '\0') {
        int ascii = (int)*start;
        if(ascii >= 97 && ascii <= 122) {
            *start = (char)(ascii - 32);
        }
        start++;
    }
    return str;
}

字符串拼接方法: 遍历被拼接的字符串数组dest,直至遍历到'\0'结束符的位置停止,将来拼接的字符串数组src依次取出字符拼接在被拼接的数组的最后一个字符之后,需要注意的是拼接生成的新字符串后面要加'\0'(被拼接的字符串数组dest容量必须足够大,足够容纳src的字符串)。点击这里看详细介绍

// 字符串拼接函数
char *mystrcat(char *dest, const char *src) {
    char *dest_p = dest;
    const char *src_p = src;

    while (*dest_p != '\0') {
        dest_p++;
    }

    while (*src_p != '\0') {
        *dest_p = *src_p;
        src_p++;
        dest_p++;
    }
    *dest_p = '\0';
    return dest;
}

字符串比较方法: 两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:。点击这里看详细介绍

// 字符串比较函数
// str1 == str2  0
// str1 < str2  负数
// str1 > str2  正数
int mystrcmp(const char *str1, const char *str2) {
    const char *str1_p = str1;
    const char *str2_p = str2;
    while (*str1_p == *str2_p && *str1_p != '\0') {
        str1_p++;
        str2_p++;
    }
    return *str1_p - *str2_p;
}

屠龙少年
1 声望1 粉丝

学习两年半的嵌入式练习生。