zoukankan      html  css  js  c++  java
  • C关于字符串操作的库函数实现总结

    常用C关于字符串操作的库函数实现:

    //获取字符串长度
    int Strlen(const char* s) {
        assert(s != NULL);
        int len = 0;
        while (*s++ != '') {
            len++;
        }
        return len;
    }
    
    //将src字符串复制到dest中
    char* Strcpy(char* dest, const char* src) {
        assert(dest != NULL && src != NULL);
        char* p = dest;
        while ((*dest++ = *src++) != '');
        return dest;
    }
    
    //将src字符串前n个字符复制到dest中
    char* Strncpy(char* dest, const char* src, int n) {
        assert(dest != NULL && src != NULL);
        char* p = dest;
        int m = 0;
        while (*p++ != '') {
            m++;
        }
        if (n > m)
            return NULL;
    
        p = dest;
        while (n--) {
            *p++ = *src++;
        }
        return dest;
    }
    
    //比较两个字符串大小
    int Strcmp(const char* str1, const char* str2) {
        assert(str1 != NULL && str2 != NULL);
        while (*str1 && *str2 && *str1 == *str2) {
            str1++;
            str2++;
        }
        return *str1 - *str2;
    }
    
    //将src字符串连接到dest字符串后面
    char* Strcat(char* dest, const char* src) {
        assert(dest != NULL && src != NULL);
        char* p = dest;
        while (*p++ != '');
        p--;
        while ((*p++ = *src++) != '');
        return dest;
    }
    
    
    /*
    * memcpy函数用于资源内存(src指向的内存)拷贝到目标内存(dest指向的内存);拷贝的个数size
    * 用法::(1)可以拷贝任何类型的对象,因为函数的参数类型是void* ,由于函数拷贝是一个字节一个
    * 字节拷贝,实际操作是将void*强制转换成了char*,这样才能保证每一次加一个指针
    */
    void Memcpy(char* dest, const char* src, size_t n) {
        assert(dest != NULL && src != NULL);
        char* pDest = (char*)dest;
        const char *pSrc = (const char*)src;
        if (pDest <= pSrc || pSrc + n <= pDest) {
            while (n--) {
                *pDest++ = *pSrc++;
            }
        } else {
            pDest += n - 1;
            pSrc += n - 1;
            while (n--) {
                *pDest-- = *pSrc--;
            }
        }
    }
    
    //memset内部实现memset(void*s,int ch,size_t n)
    /*将dest所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值,返回s*/
    void* Memset(void* dest, int ch, size_t n) {
        assert(dest != NULL && n >= 0);
        char* p = (char*)dest;
        while (n--) {
            *p++ = (char)ch;
        }
        return dest;
    }
  • 相关阅读:
    python移动文件
    python分割多个分隔符
    pywintypes.com_error: (-2147418111, '被呼叫方拒绝接收呼叫。', None, None)
    MySQL查看和修改字符集的方法
    Django创建超级管理员用户
    P2567.[SCOI2009] windy 数(数位DP)
    920G.List of Integers(莫比乌斯函数+二分)
    916E.Jamie and Tree (倍增LCA+线段树维护DFS序)
    GYM100376F.Circle and Trees(树形DP+倍增LCA)
    GYM100376E.LinearMapReduce(线段树维护矩阵乘法)
  • 原文地址:https://www.cnblogs.com/evenleee/p/10397148.html
Copyright © 2011-2022 走看看