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;
    }
  • 相关阅读:
    Web中的图标(Sprites雪碧图、Icon Font字体图标)
    那些不推荐使用的html标签
    Vim学习
    web前端性能优化建议
    开发基础
    数据库事务
    java集合详解
    java基础总结大纲(一)
    java设计模式之单例模式(饿汉)
    java设计模式之单例模式(内部静态类)
  • 原文地址:https://www.cnblogs.com/evenleee/p/10397148.html
Copyright © 2011-2022 走看看