主要的操作字符串的函数

// 内存拷贝
void* mem_cpy(void* dest,const void* src,size_t n)
{
    assert(NULL!=dest && NULL!=src && dest!=src && 0!=n);
// 防止src与dest内存块之间有交集
if(dest > src)
{
    // 从后向前拷贝
    for(int i=n-1; i>=0; i--)
    {
        // 以字节为单位拷贝,void指针的进步值是1,void指针不能解引用所以要先转换成char*再解引用
        *(char*)(dest+i) = *(char*)(src+i);
    }
}
else
{
    // 从前向后拷贝
    for(int i=0; i<n; i++)
    {
        *(char*)(dest+i) = *(char*)(src+i);
    }
}
return dest;
}


// 计算字符串长度
size_t str_len(const char* str)
{
    assert(NULL != str);
    // 让tmp指向字符串的开头
    const char* tmp = str;
    // *tmp结果是'\0',while循环结束
    while(*tmp++);
    // 由于tmp使用的是后++,此时tmp指向的是'\0'后面的位置
    return tmp-str-1;
}


// 把字符串src拷贝到dest位置,包括'\0'
char* str_cpy(char* dest,const char* src)
{
    assert(NULL!=dest && NULL!=src);
    // 备份dest
    char* tmp = dest;
    // 把字符串src中的每个字符者拷贝给dest,把'\0'拷贝过去后while才会结束
    while(*tmp++ = *src++);
    // 返回dest方便后续链式调用
    return dest;
}


// 把字符串src连接dest的末尾
char* str_cat(char* dest,const char* src)
{
    assert(NULL!=dest && NULL!=src);
    // 备份dest
    char* tmp = dest;
    // 循环结束时,tmp要指向dest的'\0'位置
    while(*tmp) tmp++;
    // 把字符串src中的每个字符拷贝到dest的末尾,把'\0'拷贝过去后while才会结束
    while(*tmp++ = *src++);
    return dest;
}


// 字符串比较
int str_cmp(const char* s1,const char* s2)
{
    assert(NULL!=s1 && NULL!=s2);
// 找到s1和s2第一个不相等的字符
while(*s1 && *s1 == *s2)
    s1++ , s2++;
if(*s1 > *s2)
    return 1;
if(*s1 < *s2)
    return -1;
// 字符串s1、s2一模一样 
return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容