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

📅 2026/8/1 2:11:01 👁️ 阅读次数 📝 编程学习
C语言字符函数和字符串函数

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:表示错误码

返回值

函数返回通过错误码得到的错误信息字符串的首字符的地址。