目录
基本知识框架
课堂笔记
在C语言中,对字符和字符串的处理相当频繁,C语言拥有专门的库函数用于处理字符串,但并没有专门的字符串类型数据用于存储字符串,通常我们使用常量字符串和字符数组来存储字符串。
常量字符串数组只可以读取,不可以修改,而字符数组既可以读取,也可以修改
相应的用于处理字符串的函数主要有以下几类:
字符串处理函数
strlen
size_t strlen(const char *str)
功能:计算字符串长度
返回值:字符串长度
注意:
- 计算长度时,不包含末尾的 ‘\0’
- 注意返回的是无符号的整数
strcpy
char *strcpy(char *dest, const char *src)
功能:字符串拷贝,将源字符串str拷贝到目标字符串dest中
返回值:目标字符串dest的地址
注意:
- 目标字符串必须可修改
- 源字符串必须以’\0’结尾,会复制源字符串结尾的 ‘\0’
- 如果目标字符串容量不够大,容易出现缓冲溢出的情况
strncpy
char *strncpy(char *dest, const char *src, size_t n)
功能:字符串拷贝,拷贝源字符串str的前n个字符到目标字符串dest中
返回值:目标字符串dest的地址
注意:
- 目标字符串必须可修改
- 不会复制源字符串结尾的 ‘\0’
- 如果目标字符串容量不够大,容易出现缓冲溢出的情况
- 源字符串和目标字符串占用的空间不能重叠
- 当n>strlen(src)时,在末尾补上’\0’进行填充
strcat
char* strcat(char* dest,const char* src)
功能:字符串拼接,拷贝源字符串str到目标字符串dest尾部
返回值:目标字符串的地址
注意:
- 目标字符串必须可修改
- 源字符串必须以’\0’结尾,会将目标字符串末尾的’\0’覆盖掉
- 会在拼接后的字符串尾部新增’\0’
- 源字符串和目标字符串占用的空间不能重叠
strncat
char* strncat (char* dest,const char* src,size_t num)
功能:字符串拼接,拷贝源字符串str的前n个字符到目标字符串dest尾部
返回值:目标字符串的地址
注意:
- 目标字符串必须可修改
- 源字符串必须以’\0’结尾,会将目标字符串末尾的’\0’覆盖掉
- 会在拼接后的字符串尾部新增’\0’
- 源字符串和目标字符串占用的空间不能重叠
- 当n>strlen(src)时,不会补齐’\0’,仅将源字符串str全部拼接至目标字符串尾部
strcmp
int strcmp (const char* str1,const char* str2)
功能:字符串比较,比较字符串str1和字符串str2
返回值:比较结果
注意:
- 字符串比较的规则是比较当前字符的ASCII码值
- 比较结束的标志是已经得出比较结果(其中一个字符比较大或小)或者其中一串字符已经比较结束
- 当两个字符相等时会返回0
- 大小写敏感,如果要忽略大小写,可以使用stricmp
strncmp
int strncmp(const char *str1, const char *str2, size_t n)
功能:字符串比较,比较字符串str1和字符串str2的前n个字符
返回值:比较结果
注意:
- 基本同strcmp
字符串查找函数
strchr
char* strchr(const char* str,char c)
功能:查找字符串中的字符,查找字符串str中是否有字符c
返回值:字符串str中如果存在字符c,返回字符串str中第一次出现字符c的地址。如果字符串str中不存在字符c,返回NULL
strrchr
char* strchr(const char* str,char c)
功能:查找字符串中的字符,查找字符串str中是否有字符c
返回值:字符串str中如果存在字符c,返回字符串str中最后一次出现字符c的地址。如果字符串str中不存在字符c,返回NULL
strstr
char* strstr(const char* str,const char* substr)
功能:查找字符串中的子字符串,查找字符串str中是否有子字符串substr
返回值:字符串str中如果存在子字符串substr,返回字符串str中第一次出现子字符串substr的地址。如果字符串str中不存在子字符串substr,返回NULL
strtok
char* strtok(char* str,const char* sep)
功能:根据分隔符分割字符串,根据分隔符sep将字符串str分割成若干段
返回值:分割后的后半段字符串的首地址,后半段已再无字符串则返回NULL
注意:
- sep参数是一个字符串,意味着分隔符可以有多个
- strtok会修改原字符串,当strtok匹配到字符串str中有相应的分隔符sep时,会将字符串str中的匹配字符改为’\0’
- 第一次调用strtok时,必须传入参数str,第二次调用时无需传入参数str,直接传入NULL,函数中会自动使用static函数保存分割后的后半段字符串的首地址
- 分隔符sep只作为输入参数,不会输出显示
strspn
size_t strspn(const char* str1, const char* str2)
功能:返回两个字符串之间存在连续相同字符的数量,从首到尾计算字符串str1与字符串str2中连续相同字符的个数
返回值:连续相同字符的个数,无符号数
注意:
- 当字符串str1的字符全部都出现在字符串str2 中时,返回字符串str1的长度
- 当字符串str1的第一个字符就和字符串str2的不匹配时,直接返回0
strcspn
size_t strcspn(const char* str1, const char* str2)
功能:返回两个字符串之间存在连续不同字符的数量,从首到尾计算字符串str1与字符串str2中连续不同字符的个数
返回值:连续不同字符的个数,无符号数
注意:
- 当字符串str1的字符全部都没有出现在字符串str2 中时,返回字符串str1的长度
- 当字符串str1的第一个字符就和字符串str2的匹配时,直接返回0
内存操作函数
malloc
void *malloc(size_t size);
功能:在内存中申请指定size大小的空间
返回值:如果申请成功则返回该内存空间的首地址,如果申请失败,返回NULL
注意:
- malloc申请出来的内存空间,不会被初始化
- malloc申请出来的内存空间,大小以字节计算
calloc
void *calloc(size_t num,size_t size);
功能:在内存中申请连续num块指定size大小的空间
返回值:如果申请成功则返回内存空间的首地址,如果申请失败,返回NULL
注意:
- calloc申请出来的内存空间,会被初始化成0
- calloc申请出来的内存空间,大小以字节计算
realloc
void *realloc(void *ptr, size_t size)
功能:重新分配之前已经申请的内存空间
返回:如果分配成功则返回重新分配内存空间的首地址,如果分配失败,返回NULL
注意:
- 传入的参数包括要重新分配空间内存块的首地址ptr,以及要重新分配大小size
free
void free(void *ptr)
功能:释放已被分配内存空间
返回:无返回值
注意:
- 指针ptr指向要释放的内存空间
- 当指针ptr的值为NULL时,不会有任何效果
- 当分配的内存块较大时,并且不再使用时,要使用free函数去释放内存空间
memcpy
void *memcpy(void *dest,void *src,unsigned int count);
功能:拷贝内存空间,将源地址src指向空间拷贝count个字节的内容到目标地址dest指向的空间
返回值:返回拷贝完成后目标地址的指针dest
注意:
- 内存拷贝的字节数由count决定
- 当count>sizeof(src)时,会在末尾补上’\0’
- 源地址与目标地址指向的空间不能重叠
memmove
void *memmove(void *dest,void *src,unsigned int count);
功能:移动(拷贝)内存空间
返回值:同memcpy
注意:
- 和memcpy一样的功能,同样是拷贝内存空间
- memmove可以处理地址指向空间重叠的问题,注意源地址src只想的空间可能会被改变
memset
void *memset(void *buffer,int c,int count);
功能:初始化内存空间,将buffer指向的内存空间中的前count 个字节的内容初始化为整形数据c
返回值:初始化后的内存空间
注意:
- 一般用于给数组、字符串等类型赋值
memcmp
int memcmp(void *buf1,void *buf2,unsigned int count);
功能:比较buffer1和buffer2指向内存空间的前count个字节
返回值:比较结果,有符号整型数
注意:
- 功能上其实与strncmp差不多,都是根据ASCII码进行比较
memchr
void *memchr(const void *str, int c, size_t n)
功能:查找str指向的内存空间中前n个字节,是否出现字符c
返回值:如果查找成功,返回str中出现字符c的地址。如果查找失败,返回NULL
注意:
- 传入的字符是以int的形式传入的,查找是都是将这个值看作无符号字符
其他字符相关函数
islower:
int islower(int c)
功能:判断字符是否为小写(a~z)
返回值:如果是小写,返回一个非零值表示True,否则返回0,表示False
isupper
int isupper(int c)
功能:判断字符是否为大写(A~Z)
返回值:如果是大写,返回一个非零值表示True,否则返回0,表示False
isalpha
int isalpha(int c)
功能:判断字符是否为字母(a~z, A~Z)
返回值:如果是字母,返回一个非零值表示True,否则返回0,表示False
isalnum
int isalnum(int c)
功能::判断字符是否为数字或字母;(0~9,a~z,A~Z)
返回值:如果是数字或字母,返回一个非零值表示True,否则返回0,表示False
tolower
int tolower(int c)
功能::转化字符为小写字母
toupper
int toupper(int c)
功能:转化字符为大写字母
atoi
int atoi(const char *str)
功能:将ASCII码转换为数字
基本知识框架Xmind文件下载
链接: 资源下载