my_strcat(字符串连接)

写法1

//写法一
char* my_strcat1(char* dest, char* src)
{
    int i = 0;
    //向让i对应'\0'位置
    while(dest[i] != '\0')//可以将dest[i]写成*(src+i)
    {
        i++;
    }
    //将src的字符串全部拷贝获取连接在尾巴上
    int j = 0;
    while(src[j] != '\0')
    {
        dest[i] = src[j];
        i++;
        j++;
    }
    return dest;
}

写法2

//写法二
char* my_strcat2(char* dest, char* src)
{
    char* temp = dest;
    //将指针,移动到'\0'位置
    while(*dest != '\0')
    {
        dest++;
    }
    //类似于strcpy的拷贝操作
    while(*src != '\0')
    {
        *dest = *src;
        dest++;
        src++;
    }
    *dest = '\0';
    return dest;
}

写法3

//写法三,写法二的简写
char* my_strcat3(char* dest, char* src)
{
    char *temp = dest;
    //将指针,移动到'\0'位置
    while(*++dest);
    //类似于strcpy的拷贝操作
    while(*dest++ = *src++);

    return temp;
}

my_strcmp(字符串比较)

写法1

int my_strcmp1(char* s1, char* s2)
{
    int i = 0;
    while(s1[i] != '\0' || s2[i] != '\0')//也可以将s1[i]写成*(s1+i)
    {
        if(s1[i] > s2[i])
            return 1;
        else if(s1[i] < s2[i])
            return -1;
        else//相等,i++,继续比较下一个字符
            i++;
    }
    //只有当s1[i]和s2[i]同时到达'\0'的时候才循环才会结束,只有一种情况才能
    //同时到达'\0'那就是字符串相等的时候,直接返回0
    return 0;
}

写法2

int my_strcmp2(char* s1, char* s2)
{
    while(*s1 != '\0' || *s2 != '\0')
    {
        if(*s1 > *s2)
            return 1;
        else if(*s1 < *s2)
            return -1;
        else//相等,同时移动指针,指向下一个字符
        {
            s1++;
            s2++;
        }

    }
    //只有当*s1和*s2同时到达'\0'的时候才循环才会结束,只有一种情况才能
    //同时到达'\0'那就是字符串相等的时候,直接返回0
    return 0;
}

my_strcpy(字符串拷贝)

写法1

//写法一
char* my_strcpy1(char* dest, char *src)
{
    int i = 0;
    while(src[i] != '\0')//或者将src[i]写成*(src+i)
    {
        dest[i] = src[i];
        i++;
    }
    dest[i] = '\0';
    return dest;
}

写法2

//写法二
char* my_strcpy2(char* dest, char* src)
{
    //先定义一个临时的指针变量将字符串的首地址保存起来
    //因为在拷贝的过程中dest++,移动了指针,拷贝后dest指向的是'\0'位置
    //不再是字符串的第一个字符
    char* temp = dest;
    while(*src != '\0')
    {
        *dest = *src;
        src++;
        dest++;
    }
    *dest = '\0';
    return temp;
}

写法3

//写法三
char* my_strcpy3(char* dest, char* src)
{
    char* temp = dest;
    while(*dest++ = *src++);
    return temp;
}

my_strlen(求字符串长度)

写法1

//写法一
int my_strlen1(char* s)
{
    int i = 0;
    while(*(s+i) != '\0')
    {
        i++;
    }
    return i;
}

写法2

//写法二
int my_strlen2(char* s)
{
    int i = 0;
    while(s[i] != '\0')
    {
        i++;
    }
    return i;
}

写法3

//写法三
int my_strlen3(char* s)
{
    int len = 0;
    while(*s != '\0')
    {
        len++;
        s++;
    }
    return len;
}
End

本文标题:C语言 自己封装string的四个函数

本文链接:http://chisato.cn/index.php/archives/37/

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

声明:转载请注明文章来源。

最后修改:2021 年 11 月 21 日 02 : 26 PM
如果觉得我的文章对你有用,请随意赞赏