栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

求字符串长度

蘿strlen

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

蘿strcpy

蘿strcat

蘿strcmp

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

蘿strncpy

蘿strncat

蘿strncmp

字符串查找

蘿strstr

蘿strtok

错误信息报告

蘿strerror

蘿字符分类函数:

字符操作内存操作函数

蘿memcpy

蘿memmove

蘿memcmp

蘿memset


                                                  

求字符串长度

蘿strlen

size_t strlen ( const char * str );

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

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

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

学会模拟实现 - strlen

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

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

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

蘿strcpy

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

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

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

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

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

学会模拟实现 - strcpy

学会模拟实现 - 进行简化

蘿strcat

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

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

将两者连接在destination中形成。

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

错误代码和上面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中的下一个标记,并将其用 结尾,返回一个指向这个标记的指针。(注: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的内存位置。
  • 这个函数在遇到 '' 的时候并不会停下来。
  • 如果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的内存位置。
  • 这个函数在遇到 '' 的时候并不会停下来。
  • 如果source和destination有任何的重叠,复制的结果都是未定义的。

memcmp的正确使用方式:

蘿memset

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

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

memset的正确使用方式:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1025302.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号