目录
1. 字符函数
1.1 字符分类函数
1.2 字符转换函数
2. 字符串函数
2.1 strlen 函数
2.2 strcpy 函数
2.3 strcat 函数
2.4 strcmp 函数
2.5 strncpy 函数
2.6 strncat 函数
2.7 strncmp 函数
2.8 strstr 函数
结语
1. 字符函数
在C语言标准库中提供了一系列用于处理字符的函数,这些函数定义在 <ctype.h>头文件中。
字符函数分为两种:字符分类函数和字符转换函数
1.1 字符分类函数
C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符。
例如:islower函数是判断参数部分是否为小写字母,如果是小写字母就返回非0的数字,如果不是小写字母就返回0
#include<stdio.h>
#include<ctype.h>
int main()
{
char c = 'A';
int ret = islower(c);
printf("%d", ret);
return 0;
}
运行结果:
练习:写⼀个代码,将字符串中的⼩写字⺟转⼤写,其他字符不变。
#include<stdio.h>
#include<ctype.h>
int main()
{
char str[] = "hello world";
int i = 0;
while (str[i])
{
if (islower(str[i]))
{
str[i] = str[i] - 32;
}
i++;
}
printf("%s", str);
return 0;
}
运行结果:
对于剩余的字符分类函数,大家可以手动进行尝试一下,这里就不在进行详细介绍啦
1.2 字符转换函数
C语⾔提供了2个字符转换函数:
tolower ( c ); //将参数传进去的⼤写字⺟转⼩写
toupper ( c ); //将参数传进去的⼩写字⺟转⼤写
tolower函数示例:
#include<stdio.h>
#include<ctype.h>
int main()
{
char c=tolower('A');
printf("%c", c);
return 0;
}
toupper函数示例:
#include<stdio.h>
#include<ctype.h>
int main()
{
char c=toupper('a');
printf("%c", c);
return 0;
}
学习完字符转换函数后,我们将上面练习的代码进行改造一下:
int main()
{
char str[] = "hello world";
int i = 0;
while (str[i])
{
if (islower(str[i]))
{
str[i] = toupper(str[i]);
}
i++;
}
printf("%s", str);
return 0;
}
上⾯的代码,我们将⼩写转⼤写,是-32完成的效果,有了转换函数,就可以直接使⽤ tolowe函数。
2. 字符串函数
在C语言标准库中的<string.h>头文件中提供了一系列用于处理字符串的函数,这些函数用于字符串的复制、连接、比较、搜索、分割等操作。
下面介绍一些C语言中常用的字符串函数
2.1 strlen 函数
strlen函数是用来计算参数(字符串)长度的(不包括终止的空字符 \0 )
strlen函数的注意事项:
• 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包 含 '\0' )。
• 参数指向的字符串必须要以 '\0' 结束。
• 注意函数的返回值为 size_t,是⽆符号的( 易错 )
• strlen的使⽤需要包含头⽂件
strlen函数的使用:
注意这里的初始化方式会在 str字符数组默认最后加上一个 \0,如果用另一种初始化方式会出现什么现象呢?
为什么这里计算str字符数组的长度是74呢?因为这里的初始化方式是不会自动补上 \0,所以strlen函数会根据地址一直往后找,直到找到 \0,所以这里的 74 实际上是一个随机值。
此时我们在数组的末尾加上 \0 这时候strlen函数计算的结果就是 \0前面的字符个数。
2.2 strcpy 函数
strcpy函数会将源指向的字符串复制到目标指向的数组中,包括终止的空字符(并在该点停止)
strcpy函数的注意事项:
• destination指向字符串复制到的数组,source指向要复制的字符串
• 源字符串必须以 '\0' 结束。
• 会将源字符串中的 '\0' 拷⻉到⽬标空间。
• ⽬标空间必须⾜够⼤,以确保能存放源字符串。(否则会出现栈帧空间溢出的现象)
• ⽬标空间必须可修改。
例如:
2.3 strcat 函数
strcat函数是将字符串source连接到destination的末尾(包括终止的空字符 \0)
strcat函数的注意事项:
• 源字符串必须以 '\0' 结束。
• ⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。
• ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。
• ⽬标空间必须可修改。
例如:
注意这里被追加的目标空间必须保证足够大,否则也会出现栈帧空间溢出的现象
那么strcat函数是否可以自己追加自己呢?其实是可以的,但是一般不会这样使用,使用不当很容易造成死循环的问题 ,对于自己追加自己,我们一般使用strncat函数,在下面我们将会了解到strncat函数。
2.4 strcmp 函数
strcmp函数是用于两个字符串进行比较的
• 如果第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
• 如果第⼀个字符串等于第⼆个字符串,则返回0
• 如果第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字
例如:
2.5 strncpy 函数
strncpy和strcpy是非常相似的,strncpy在参数部分加上了复制的字节个数(size_t num)
用法与strcpy也是一模一样的,只是这时候可以由我们操控复制多少个字节(num)到目标位置。
例如:
注意:如果源字符串的⻓度⼩于num,则拷⻉完源字符串之后,在⽬标的后边追加0,直到num个。
2.6 strncat 函数
对比strcat函数,strncat函数在参数部分也多了一个(size_t num)追加的字节个数
例如:
这时候就可以自己操控自己想要追加的内容了
注意:如果source 指向的字符串的⻓度⼩于num的时候,只会将字符串中到 \0 的内容追加到destination指向的字符串末尾
例如:
2.7 strncmp 函数
对比strcmp函数,strncmp函数在参数部分也多了一个(size_t num)比较的字节个数
⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀ 样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回0
例如:
此时只是比较的str1和str2中的前3个字符,前三个字符相等所以返回值为0
2.8 strstr 函数
strstr函数的作用是在一个字符串(str1)中查找第一次出现的子字符串(str2),并返回指向该子字符串的指针,如果没有找到子字符串,则返回NULL(空指针)
例如:
结语
以上就是C语言中常见的字符函数以及字符串函数,希望通过本章的学习,大家能够利用这些函数使得代码更加简洁并且提高程序执行的效率,如果有感兴趣的小伙伴可以想一想这些函数是如何实现的,自己是否也可以手动实现这些函数。在此感谢大家的观看~