C手写字符串覆盖、追加、比较、查找函数

#define _CRT_SECURE_NO_WARNINGS 1

#include
#include

//字符串拷贝
char* my_strcpy(char* dest, const char* src)
{
    char* ret = dest;
    assert(dest!=NULL);//在代码中进行断言检查。
    assert(src!=NULL);//在代码中进行断言检查。
    while (*src!='\0')//我们要对src解引用可是有可能里面存在空值,
    {
        *dest = *src;
        src++;
        dest++;
    }
    *dest = *src;//\0
    return ret;
}

char* my_strcpy1(char* dest, const char* src)
{
    char* ret = dest;
    assert(dest != NULL);
    assert(src != NULL);
    //在while条件判断的位置,\0在条件判断时被视为 false,所以当 *src 的值为 ‘\0’ 时,循环条件为 false,循环终止。
    while(*dest++ = *src++)
    {

    }
    return ret;
}
    
//字符串连接,从源头追加到目的地后边
char* my_strcat(char* dest,const char* src) 
{
    char* ret = dest;
    assert(dest != NULL);
    assert(src != NULL);
    while (*++dest)//检查/0
    {

    };
    while (*dest++ =*src++)
    {

    };
    return ret;
}

//字符串比较
int my_strcmp(const char* str1, const char* str2)
{
    while (*str1 == *str2)
    {
        assert(str1&&str2);
        if (*str1 == '\0')
            return 0;
        str1++;
        str2++;
    }
    return (*str1 - *str2);
}

//字符串查找
char* my_strstr(char *str1,char *str2) 
{
    char* cp = str1;
    char* s1 = cp;
    char* s2 = str2;
    if (*str2 == '\0')
    {
        return str1;
    }
    while (*cp) 
    {
        //开始匹配
        s1 = cp;
        s2 = str2;
        while (*s1 && *s2 && *s1==*s2) 
        {
            s1++;
            s2++;
        }
        if (*s2 == '\0') 
        {
            return cp;
        }
        cp++;
    }
    return NULL;
}


int main() 
{
    char arr1[20] = "hello world";
    char arr2[]   = "xxxxxxx";
    printf("%s\n", my_strcpy(arr1, arr2));
    printf("%s\n",my_strcpy1(arr1, arr2));

    char arr3[20] = "hello";
    char arr4[] = "world";
    printf("%s\n",my_strcat(arr3,arr4));

    int ret = my_strcmp("bdq","bcq");
    if (ret > 0) 
    {
        printf("str1");
    }

    char arr5[] = "abbbcdef";
    char arr6[] = "bcd";
    char* ret1= my_strstr(arr5,arr6);
    if (ret1 != NULL)
    {
        printf("%s\n", ret1);
    }
    else
    {
        printf("找不到\n");
    }

    return 0;
}

你可能感兴趣的:(算法)