• C语言:字符函数和字符串函数


    😀求字符串长度

    🤐strlen

    😀长度不受限制的字符串函数

    🤐strcpy

    🤐strcat

    🤐strcmp

    😀长度受限制的字符串函数介绍

    🤐strncpy

    🤐strncat

    🤐strncmp

    😀字符串查找

    🤐strstr

    🤐strtok

    😀错误信息报告

    🤐strerror

    🤐字符分类函数:

    😀字符操作内存操作函数

    🤐memcpy

    🤐memmove

    🤐memcmp

    🤐memset


                                                      

    😀求字符串长度

    🤐strlen

    size_t strlen ( const char * str );

    • 字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。
    • 参数指向的字符串必须要以 '\0' 结束。
    • 注意函数的返回值为size_t,是无符号的( 易错 )

    问题举例1:(参数指向的字符串必须要以 '\0' 结束)

    问题举例2:(注意函数的返回值为size_t,是无符号的( 易错 ))

    学会模拟实现 - strlen

    学会模拟实现 - strlen()(使用指针减去指针的方式进行统计)

    学会模拟实现 - strlen()(使用递归的方式进行统计)

    😀长度不受限制的字符串函数

    🤐strcpy

    char* strcpy(char * destination, const char * source );

    将源指向的C字符串复制到目标指向的数组中,包括终止空字符(并在此停止)

    • 源字符串必须以 '\0' 结束。
    • 会将源字符串中的 '\0' 拷贝到目标空间。
    • 目标空间必须足够大,以确保能存放源字符串。
    • 目标空间必须可变。

    问题举例1:(源字符串必须以 '\0' 结束) (会将源字符串中的 '\0' 拷贝到目标空间)

    问题举例1:(目标空间必须足够大,以确保能存放源字符串)

    学会模拟实现 - strcpy

    学会模拟实现 - 进行简化

    🤐strcat

    char * strcat ( char * destination, const char * source );

    • 将源字符串的副本追加到目标字符串。终止空字符在destination中被源的第一个字符覆盖,并且包含一个空字符在新字符串的末尾,

    将两者连接在destination中形成。

    • 源字符串必须以 '\0' 结束。
    • 目标空间必须有足够的大,能容纳下源字符串的内容。
    • 目标空间必须可修改。
    • 字符串自己给自己追加。

    错误代码和上面strlen是一个概念这里就不写了。

    正确代码书写方式:

    学会模拟实现 - strcat

    🤐strcmp

    int strcmp ( const char * str1, const char * str2 );

    这个函数开始比较每个字符串的第一个字符。如果它们相等其他情况下,它继续使用以下对,直到字符不同或终止达到零字符

    标准规定:

    • 第一个字符串大于第二个字符串,则返回大于0的数字
    • 第一个字符串等于第二个字符串,则返回0
    • 第一个字符串小于第二个字符串,则返回小于0的数字

    问题举例1:

    正确书写方式:

    学会模拟实现 - strcmp

    学会模拟实现 - strcmp

    😀长度受限制的字符串函数介绍

    🤐strncpy

    char * strncpy ( char * destination, const char * source, size_t num );

    • 将源的第一个num字符复制到目标。如果源C字符串的结尾(由空字符表示)在复制num字符之前找到,

    Destination使用零填充,直到总共写入了num个字符

    • 拷贝num个字符从源字符串到目标空间。
    • 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

    🤐strncat

    char * strncat ( char * destination, const char * source, size_t num );

    • 将源的第一个num字符附加到目标,再加上一个终止的空字符。如果源文件中C字符串的长度小于num,则只包含直到终止的内容

    null字符复制

    🤐strncmp

    int strncmp ( const char * str1, const char * str2, size_t num );

    • 比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。
    • 第一个字符串大于第二个字符串,则返回大于0的数字
    • 第一个字符串等于第二个字符串,则返回0
    • 第一个字符串小于第二个字符串,则返回小于0的数字

    😀字符串查找

    🤐strstr

    char * strstr ( const char *str1, const char * str2);

    返回一个指向str1中第一个出现的str2的指针,如果str2不是str1的一部分,则返回一个空指针str1。

    学会模拟实现 - strstr()

    🤐strtok

    char * strtok ( char * str, const char * sep );

    • sep参数是个字符串,定义了用作分隔符的字符集合
    • 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
    • strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数

    切分的字符串一般都是临时拷贝的内容并且可修改。)

    • strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
    • strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
    • 如果字符串中不存在更多的标记,则返回 NULL 指针。

    strtok的正确使用方式:

    strtok的正确使用 - 优化

    😀错误信息报告

    🤐strerror

    • 返回错误码,所对应的错误信息。

    🤐字符分类函数:

    函数

    如果他的参数符合下列条件就返回真

    iscntrl

    任何控制字符

    isspace

    空白字符:空格‘ ’,换页‘\f’,换行'\n',回车‘\r’,制表符'\t'或者垂直制表符'\v'

    isdigit

    十进制数字 0~9

    isxdigit

    十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F

    islower

    小写字母a~z

    isupper

    大写字母A~Z

    isalpha

    字母a~z或A~Z

    isalnum

    字母或者数字,a~z,A~Z,0~9

    ispunct

    标点符号,任何不属于数字或者字母的图形字符(可打印)

    isgraph

    任何图形字符

    isprint

    任何可打印字符,包括图形字符和空白字符

    😀字符操作内存操作函数

    🤐memcpy

    void * memcpy ( void * destination, const void * source, size_t num );(内存块的拷贝)

    • 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
    • 这个函数在遇到 '\0' 的时候并不会停下来。
    • 如果source和destination有任何的重叠,复制的结果都是未定义的。

    memcpy的正确使用方式:

    学会模拟实现 - memcpy()

    🤐memmove

    void * memmove ( void * destination, const void * source, size_t num );

    • 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
    • 如果源空间和目标空间出现重叠,就得使用memmove函数处理。

    memmove的正确使用方式:

    学会模拟实现 - memmove()

    首先我们画图分析一下:如何才能正确的进行拷贝:

    代码实现:

    🤐memcmp

    void * memcpy ( void * destination, const void * source, size_t num );

    • 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
    • 这个函数在遇到 '\0' 的时候并不会停下来。
    • 如果source和destination有任何的重叠,复制的结果都是未定义的。

    memcmp的正确使用方式:

    🤐memset

    void * memset ( void * ptr, int value, size_t num );

    • 将ptr指向的内存块的第一个num字节设置为指定的值(解释为unsigned char)

    memset的正确使用方式:

  • 相关阅读:
    C++语言学习笔记Day1-C++概述
    PACS医学影像系统源码,三维重建技术 自主研发,功能齐全,可直接上手项目
    前端应用聚合整改
    刷题记录(NC16708 过河卒,NC16619 传球游戏,NC16810 [NOIP1999]拦截导弹)
    ClickHouse Projection
    Java项目:SSM企业OA管理系统
    react native常用插件
    Apache HTTPD 多后缀解析漏洞
    defer和async区别
    数据结构与算法—双链表
  • 原文地址:https://blog.csdn.net/lx473774000/article/details/126005464