1.字符分类函数
2.字符转换函数
3.strlen的使用和模拟实现
4.strcpy的使用和模拟实现
5.strcat的使用和模拟实现
6.strcmp的使用和模拟实现
7.strncpy函数的使用
8.strncat函数的使用
9.strncmp函数的使用
10.strstr的使用和模拟实现
11.strtok函数的使用
12.strerror函数的使用
在本章关于字符函数和字符串函数的内容中,我们需要引入的头文件有:
#include<string.h>(用于字符串函数),
#include<ctype.h>(用于字符分类与转换函数)。
一.字符分类函数
十个分类函数
1.isspace(c):空白字符:空格、\n \t \r \v \f
2.isdigit(c):十进制数字0~9
3.isxdigit(c):十六进制0-9,a-f,A-F
4.islower(c):小写字母 a~z
5.isupper(c):大写字母 A~Z
6.isalpha(c):字母(大小写)
7.isalnum(c):字母 + 数字
8.ispunct(c):标点符号
9.isgraph(c):可见非空格字符
10.isprint(c):可打印字符(含空格)
使用上面的函数需要声明头文件:#include<ctype.h>;
使用规则
1.返回值:非 0 = 条件成立;0 = 不成立,不要直接判断==1
2.参数隐患:字符若为负数(如中文、扩展 ASCII)会出错,规范写法:函数名((unsigned char)ch)
3.只判断,不修改字符本身
例一:
int main() { int r = isdigit('x'); //int r = isdigit('8'); //int n = islower('8'); int n = islower('A'); printf("%d\n", r); printf("%d\n", n); return 0; }代码运行结果:
例二:写一个代码,将字符串中的小写转换成大写字母,其他字符不变
int main() { char arr[] = "I am a Student!"; int i = 0; while (arr[i] != '\0') { if (islower(arr[i])) arr[i] -= 32; printf("%c", arr[i]); i++; } return 0; }代码运行结果:
二.字符转换函数
1.tolower:大写字母转小写
2.toupper:小写字母转大写
代码块:
int toupper(int c);int tolower(int c);
例三:大写字母转小写
int main() { //int r = tolower('x'); int r = tolower('X'); //printf("%c\n", r); putchar(r); return 0; }代码运行结果:
例四:小写字母转大写
int main() { int r = toupper('x'); printf("%c\n", r); putchar(r); return 0; }代码运行结果:
三.strlen的使用和模拟实现
代码块:
size_t strlen(const char *str);
功能:统计参数str指向的字符串的长度。统计的是字符串中'\0'之前的字符的个数。
参数:
str:指针,指向了要统计长度的字符串。
返回值:返回了str指向的字符串的长度,返回的长度不会是负数,所以返回类型是size_t.
四.strcpy的使用和模拟实现
代码块:
char* strcpy(char* dest,const char* src);功能:字符串的拷贝,拷贝到源头字符串中的\0为止。
参数:
dest:指针,指向目标空间起始地址;
src:指针,指向源字符串起始地址;
返回值:strcpy返回目标空间 dest 的起始地址。
五.strcat的使用和模拟实现
代码块:char* strcat(char* dest,const char* src);功能:字符串追加,将 src 指向的字符串中所有字符都追加到 dest 指向的空间。
参数:
dest:指针,目标空间起始地址;
src:指针,源字符串起始地址。
返回值:返回 dest 目标空间的起始地址(char*)。
六.strcmp的使用和模拟实现
代码块:
int strcmp(const char* str1,const char* str2);
功能:
逐字符比较 str1 和 str2 两个字符串的 ASCII 码值,直到出现不同字符或者遇到'\0'停止比较。参数:
str1:待比较的第一个字符串起始地址;
str2:待比较的第二个字符串起始地址;
const 修饰,函数内部不会修改两个字符串。
返回值:
>0:str1 > str2
=0:str1 == str2
<0:str1 < str2
七.strncpy函数的使用
代码块:
char* strncpy(char* dest,const char* src,size_t num);功能:
从 src 指向字符串拷贝最多 num 个字符到 dest 指向空间。
若 src 字符串长度小于 num,剩余空间填充\0;
若 src 长度≥num,仅拷贝 num 个字符,不会自动追加结束符\0。
参数:
dest:指针,目标空间起始地址;
src:指针,源字符串起始地址;
返回值:返回 dest 目标空间起始地址(char*)。
八.strncat函数的使用
代码块:char* strncat(char* dest,const char* src,size_t num);功能:字符串追加,把src指向的源字符串中的所有字符都追加到dest指向的空间中。
参数:
dest:指针,目标空间起始地址;
src:指针,源字符串起始地址;
返回值:返回 dest 目标空间的起始地址(char*)。
九.strncmp函数的使用
代码块:
intstrncmp(const char* str1,const char* str2,size_t num);
功能:字符串比较;比较str1和str2指向的两个字符串的内容,最多比较num字符。
参数:
str1:指针,指向一个比较的字符串;
str2:指针,指向另外一个比较的字符串;
num:最多参与比较的字符数量(size_t 无符号整数);
返回值:
>0:str1 对应位置字符大于 str2
=0:前 num 个字符全部相等
<0:str1 对应位置字符小于 str2
十.strstr的使用和模拟实现
代码块:char* strstr(const char* str1,const char* str2);功能:
strstr函数,查找str2指向的字符串在str1指向的字符串中第一次出现的位置。
简而言之:在一个字符串中查找子字符串。
strstr的使用得包含<string.h>
参数:
str1:指针,指向了被查找字符串;
str2:指针,指向了要查找字符串;
返回值:
如果str1指向的字符串中存在str2指向的字符串,那么返回第一次出现位置的指针
如果str1指向的字符串中不存在str2指向的字符串,那么返回NULL;
十一.strtok函数的使用
代码块:char* strtok(char* str,const char* delim);功能:
分割字符串:根据delim参数中指定的分隔符,将输入字符串str拆分成多个子字符串。
修改原始字符串:strtok会直接在原始字符串中插入'\0'终止符,替换分隔符的位置,因此原始字符串会被修改。
参数:
str:第一次调用传入字符串地址;后续继续分割传入 NULL,表示继续分割同一个字符串。
delim:包含所有可能分隔符的字符串。
返回值:
分割成功,返回当前片段起始地址;
分割完毕返回 NULL。
十二.strerror函数的使用
代码块:
char* strerror(int errnum);
功能:
strerror函数可以通过参数部分的errnum表示错误码,得到对应的错误信息,并且返回这个错误信息字符串首字符地址。
strerror函数只针对标准库中的函数发生错误后设置的错误码的转换。
strerror的使用需要包含<string.h>
参数:
errnum:表示错误码
返回值
函数返回通过错误码得到的错误信息字符串的首字符的地址。