【C语言】字符与字符串---从入门到入土级详解
一.字符类型和字符数组(串)简介
1.ASCII
🌱先来看看百度百科对ASCII的定义:
🌱而ASCII的产生原因是:
在计算机中,所有的数据在存储和运算时都要使用二进制 数表示(因为计算机用高电平 和低电平 分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制 数来表示,而具体用哪些二进制数字 表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织 就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
🌱ASCII的内容:
2.定义,初始化,使用
1>字符的定义及初始化
因为计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。我们最常用的编码就是ASCII编码。我们先定义一个名叫ch的字符变量,再给它赋值为’A‘,如:
char ch;
ch='A';
在C语言中,用单引号括起来的单个字符被称为字符常量。编译器一发现’A‘,就会将其转换成相应的代码值。因此字符数据的初始化中,单引号必不可少。
实际上,字符是以数值形式储存的,所以也可以使用数字代码值来赋值,如:
char ch=65;
因为虽然65是int类型,但是它在char类型能表示的范围内,所以将其赋值给ch没问题。
2>字符串的定义及初始化
字符串是一个或多个字符的序列,如下所示:
"Hello world"
注意,双引号不是字符串的一部分。双引号仅告知编译器它括起来的是字符串,正如单引号用于标识单个字符一样。
char arr[15]="Hello world";
实际如上字符串在内存中的存储方式是:
该字符数组的末尾位置的字符\0是空字符,C语言用它标记字符串的结束。空字符不是数字0,它是非打印字符,其ASCII码值是(或等价于)0。C中的字符串一定以空字符结束,这意味着数组的容量必须至少比待存储字符串中的字符数多1。否则如果因为容量不够漏存了\0,将会导致系统出现一些bug。如下bug就是因为数组长度不够存储\0导致的:
因为C语言大多数的库函数在处理字符串时都会默认将\0作为字符串的结尾,如我们后面会提到的:strlen()函数(字符串长度计算函数),strcpy()函数(字符串拷贝函数)等大多都是以识别出\0来作为程序的结束标志,因此对于字符串来说,\0的存在至关重要。但是我们在定义和初始化字符串时,却不用特意在字符串的末尾安放\0,因为当字符数组容量允许时,计算机会默认帮助我们在末尾添上\0的。而在这点上字符串常量也是同理,如:
可以看到,打印的结果没有出现之前的bug现象,因此即便是字符常量,计算机也会默认帮助我们在结尾添上\0。
二.字符
1.字符的输入与输出
字符的输入常用:scanf()函数
getchar()函数
字符的输出常用:printf()函数
putchar()函数
2.常见字符操作函数
1>字符大小写转换
方法一:使用 `toupper` 和 `tolower` 函数,这两个函数分别将字符转换为大写和小写形式。
方法二:使用字母的ASCII码值特性,给大写字母+32转换成小写字母,给小写字母-32转换成大写字母。
方法三:使用位运算,将字符的 ASCII 码与 32(二进制为 0b00100000)进行按位异或运算,即可将小写字母转换为大写字母,反之亦然。例如,`'a' ^ 32` 的结果为 `'A'`,`'A' ^ 32` 的结果为 `'a'`。如:
有关大小写字母的三种转换方式有感兴趣的朋友可以移步我的这篇博客:【C语言】字母转换大小写的三种方法 https://blog.csdn.net/weixin_72357342/article/details/130932158?spm=1001.2014.3001.5502
里面有非常详细的toupper()函数和tolower()函数的参数解读及使用详解同时还包含方法二和方法三的具体实现步骤。因此这篇博客中对该部分内容就不赘述了。
2>字符类型判断
方法一:库函数判断
字符类型判断相关库函数 |
序号 |
函数名 |
函数作用 |
||||
1 |
isdigit() |
判断字符是否为数字 |
|||||
2 |
isalpha() |
判断字符是否为字母 |
|||||
3 |
isalnum() |
判断字符是否为数字或字母 |
|||||
4 |
isspace() |
判断字符是否为空格字符 |
|||||
5 |
isupper()和 islower() |
分别用于判断字符是否为大写字母和小写字母 |
|||||
6 |
iscntrl() |
判断字符是否为控制字符 |
|||||
7 |
isprint() |
判断字符是否为可打印字符 |
|||||
8 |
ispunct() |
判断字符是否为标点符号 |
方法二:使用ASCII数值区间或字符区间判断,如:
char ch='c';
int letter=0;
if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
letter++;
上述代码就是使用字符区间来判断的例子。
方法三:当然我们也可以直接使用ASCII码值来进行判断,如:
char ch='s';
int letter=0;
if((ch>=65&&ch<=90)||(ch>=97&&ch<=122))
letter++;
有关字符类型的三种判断方式有感兴趣的朋友可以移步我的这篇博客:
【C语言】字符类型判断的三种方式 https://blog.csdn.net/weixin_72357342/article/details/130956167?spm=1001.2014.3001.5501
里面有非常详细的C语言字符判断库函数详解及其使用,同时还包含方法二和方法三的具体实现步骤。因此这篇博客中对该部分内容就不赘述了,有兴趣的可以去看看。
三.字符串
1.字符串的输入与输出
字符串的输入常用scanf()函数,gets()函数,fgets()函数:
字符串的输出常用printf()函数,puts()函数,fputs()函数:
2.常见字符串操作函数
1>字符串拷贝
strcpy()函数
函数详解见文末文章
strncpy()函数
2>字符串长度
strlen()函数
函数详解见文末文章
3>字符串比较
strcmp()函数
strncmp()函数
4>字符串连接与分割
字符串连接:
strcat()函数
strncat()函数
字符串分割:
strtok()函数
5>字符串搜索与定位
strchr()函数
strrchr()函数
strstr()函数
结语
希望这篇关于字符与字符串的博客能对大家有所帮助,欢迎大佬们留言或私信与我交流.
学海漫浩浩,我亦苦作舟!关注我,大家一起学习,一起进步!
- 点赞
- 收藏
- 关注作者
评论(0)