C关于字符串操作的库函数实现总结

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

//获取字符串长度
int Strlen(const char* s) {
    assert(s != NULL);
    int len = 0;
    while (*s++ != ‘\0‘) {
        len++;
    }
    return len;
}

//将src字符串复制到dest中
char* Strcpy(char* dest, const char* src) {
    assert(dest != NULL && src != NULL);
    char* p = dest;
    while ((*dest++ = *src++) != ‘\0‘);
    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++ != ‘\0‘) {
        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++ != ‘\0‘);
    p--;
    while ((*p++ = *src++) != ‘\0‘);
    return dest;
}

/*
* memcpy函数用于资源内存(src指向的内存)拷贝到目标内存(dest指向的内存);拷贝的个数size
* 用法::(1)可以拷贝任何类型的对象,因为函数的参数类型是void* ,由于函数拷贝是一个字节一个
* 字节拷贝,实际操作是将void*强制转换成了char*,这样才能保证每一次加一个指针
*/
void Memset(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;
}

原文地址:https://www.cnblogs.com/evenleee/p/10397148.html

时间: 2024-11-12 10:43:39

C关于字符串操作的库函数实现总结的相关文章

实现C语言字符串操作的库函数

#include <stdio.h> //求字符串串长(版本一) //用字符数组实现 int mystrlen1(char s[]) { int len = 0; while(s[len] != '\0') { len++; } return len; } //求字符串串长(版本二) //用字符指针实现 int mystrlen2(char *s) { int len = 0; while (*s != '\0') { len++; s++; } return len; } int main(

字符串操作_(不使用库函数)

原文链接:http://blog.chinaunix.net/uid-24103300-id-108254.html int strlen1(const char *str); char *del_char(char *str,char c);char *delete_string(char *str,int pos,int len);const char *strstr1(const char *src,const char *sub);char *strchr1( char *str, ch

C语言难点1之输入输出,链接,字符串操作

C语言难点1之输入输出,链接,字符串操作 最近发现写了一段时间的C之后,还是有一些点并没有很好的get,我就想总结出来,写个系列博客,自己也好好的整理一下思路.这个系列主要出自三本书:<C专家编程>,<C陷阱和缺陷>,<C和指针>.有兴趣的同学可以好好看一下这几本书,对于打好C语言的基础是个非常不错的几本书. 1 一些输入输出的格式 对应的printf():和scanf()函数:在这里我给出常用的scanf格式码,和printf()函数也是一样的. 2 getchar(

转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 作者:jcsu C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. 字符串求长 - strlen5. 字符串连接 - strcat6. 字符串比较 - strcmp7. 计算字符串中的元音字符个数8. 判断一个字符串是否是回文1. 写一个函数实现字符串反转 版本1 - while版 void strRev(char *s){    

C++字符串操作笔试题第二波

//1.字符串替换空格:请实现一个函数,把字符串中的每一个空格替换成"%20". //比如输入"we are happy.".则输出"we%20are%20happy.". #include <iostream> #include <assert.h> #include <string.h> using namespace std; char* Grial(char *s) { assert(s != NULL

windows平台没有提供的两个字符串操作函数。

在看一些开源代码时,经常看到一些字符串操作函数,这些函数在Linux平台下是有的,但在windows平台上,MS没有提供.因此在软件中不得不自己实现.常见的库函数有: //获得当前字符的一个拷贝,由外部释放内存. char *strdup(const char *src) { int len; char *dst; len = strlen(src) + 1; if ((dst = (char *) malloc(len)) == NULL) return (NULL); strcpy(dst,

字符与字符串操作归纳[持续更新]

最近刷了一些题,很多喜欢考字符串转换之类的,自己平时容易忘记,做题时也去翻了很多次,故归纳下来,加深印象. 字符操作 我们经常要处理string对象中的字符,比如检查一个string是否包含空白,大小写转换,首字母大写,归纳一些字符处理的操作. 再cctype的头文件中定义了一组标准库函数处理这部分工作.主要是简化代码,改善易读性. isalnum(c) 当c是字母或数字时为真 isalpha(c) 当c是字母时为真 isdigit(c)    当c是是数字时为真 islower(c) 当c是小

条件、循环、函数定义、字符串操作练习

注意标准库的两种导入与使用方式,建议大家采用<库名>.<函数名>的方式. 对前面的代码进行优化,用for,while,if,def实现: 用循环画五角星 1 import turtle 2 3 turtle.fillcolor("red") 4 turtle.begin_fill() 5 for i in range(5): 6 turtle.forward(100) 7 turtle.right(144) 8 turtle.end_fill() 用循环画同心圆

PHP字符串操作大集合

字符串的处理非常重要.文本字符串中的空格或者其他没有意义的符号.例如,在一个电子商务应用中,当用户填写订单的内容时(如联系地址),可能输入一些空格.句号等PHP4及以上版本提供了4个去除字符串str首尾处空格或其他特殊符号.     string ltrim(string str [, string charlist]):去除字符串str尾的空格或其他特殊符号.     string chop(string str [, string charlist]):功能同rtrim(). 以上函数的第1