字符串与内存函数1

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
//C语言本身没有字符串类型,但是提供了一系列字符串函数
// 
// 
//
int my_strlen(const char* arr)
{
    assert(arr);
    /*int count = 0;
    while (*arr != '\0')
    {
        count++;
        arr++;
    }
    return count;*/


    //采取指针-指针的方式实现
    /*char* str = arr;
    while(*str != '\0')
    {
        str++;
    }
    return str - arr;*/
    
    //采取递归的方式实现
    /*if (*arr == '\0')
    {
        return 0;
    }
        return 1+my_strlen(arr+1);*/
}
char* my_strcpy(char* arr2, const char* arr1)
{
    assert(arr2);
    assert(arr1);
    char* ret = arr1;
    
    while(*arr2++ = *arr1++)
    {
        
        
    } 

    return ret;
}


//字符串追加的模拟实现
// 
//
char* my_strcat(char* dest, const char* src)
{
    while (*dest != '\0')
    {
        dest++;
    }
    while (*dest++ = *src++);
}
//strcmp比的是ASCII码值
int my_strcmp(const char* arr1, const char* arr2)
{
    assert(arr1);
    assert(arr2);
    while (*arr1 == *arr2)
    {
        if (*arr1 == '\0')
            return 0;
        arr1++;
        arr2++;
    }

        return *arr1 - *arr2;

}
//长度受限制的字符串函数
// strncmp
// strncat多了只补一个\0
// strncpy多了全补\0

int main()
{
    //char arr1[20] = "hello ";
    //my_strcat(arr1, "bitch");//不能自己覆盖自己,因为会陷入死循环,在覆盖过程中,会破坏原字符串内容(‘\0’)
    //printf("%s", arr1);

    /*char arr1[] = "hello";
    char arr2[] = "bitch";
    int ret = my_strcmp(arr1, arr2);
    if (ret)
        printf("不相同");*/

    char arr1[20] = "abcdef";
    char arr2[] = "hello bit";
    strncpy(arr1, arr2, 5);
    printf("%s", arr1);
    /*char arr[] = "abcdef";*///abcdef\0
    //看\0以前出现几个字符(ASCII码值为零)
    /*char arr[] = { 'a','b','c' };*/
    //这里会返回随机值,因为strlen遇到\0才会停止,并且返回size_t(表示无符号整型)
    //无符号整型相减不存在值为负数的情况
    //模拟实现strlen
    /*char arr[] = "abcdef";
    size_t len = my_strlen(arr);
    printf("%zu", len);*/

    /*char name1[20] = "Wang Jiale";
    char name2[20] = "";
    strcpy(name2, name1);
    printf("%s", name2);*///(destination,source)
    //拷贝的时候包括\0,但拷贝的时后遇到斜杠零就停止。
    //目标空间必须可修改
    //常量字符串不允许修改

    /*char arr1[] = "abcdef";
    char arr2[] = "";
    my_strcpy(arr2, arr1);
    printf("%s", arr2);*/
    return 0;
}

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