【C语言】字符与字符串---从入门到入土级详解

简介: 【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'`。如:

       有关大小写字母的三种转换方式有感兴趣的朋友可以移步我的这篇博客: 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++;

有关字符类型的三种判断方式有感兴趣的朋友可以移步我的这篇博客:

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()函数



结语

希望这篇关于字符与字符串的博客能对大家有所帮助,欢迎大佬们留言或私信与我交流.

学海漫浩浩,我亦苦作舟!关注我,大家一起学习,一起进步!

相关文章推荐

【C语言】strlen()函数

【C语言】strcpy()函数


C语言字符串库函数思维导图:


相关文章
|
19天前
|
存储 算法 C语言
【C语言】字符常量详解
字符常量是C语言中处理字符数据的重要工具。通过单引号括起一个字符,我们可以方便地使用字符常量进行字符判断、字符运算和字符串处理等操作。理解字符常量的表示方法、使用场景和ASCII码对应关系,对于编写高效的C语言程序至关重要。
78 11
|
19天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
39 10
|
19天前
|
存储 C语言 开发者
【C语言】格式化输出占位符及其标志字符详解(基于ISO/IEC 9899:2024)
在C语言中,格式化输出通过 `printf` 函数等格式化输出函数来实现。格式说明符(占位符)定义了数据的输出方式,标准ISO/IEC 9899:2024(C23)对这些格式说明符进行了详细规定。本文将详细讲解格式说明符的组成部分,包括标志字符、宽度、精度、长度修饰符和类型字符,并适当增加表格说明。
38 6
|
23天前
|
存储 算法 C语言
C语言中常见的字符串处理技巧,包括字符串的定义、初始化、输入输出、长度计算、比较、查找与替换、拼接、截取、转换、遍历及注意事项
本文深入探讨了C语言中常见的字符串处理技巧,包括字符串的定义、初始化、输入输出、长度计算、比较、查找与替换、拼接、截取、转换、遍历及注意事项,并通过案例分析展示了实际应用,旨在帮助读者提高编程效率和代码质量。
68 4
|
2月前
|
C语言
C语言字符(串)函数
C语言字符(串)函数
|
2月前
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
|
2月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
3月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
106 8
|
3月前
|
存储 Serverless C语言
【C语言基础考研向】11 gets函数与puts函数及str系列字符串操作函数
本文介绍了C语言中的`gets`和`puts`函数,`gets`用于从标准输入读取字符串直至换行符,并自动添加字符串结束标志`\0`。`puts`则用于向标准输出打印字符串并自动换行。此外,文章还详细讲解了`str`系列字符串操作函数,包括统计字符串长度的`strlen`、复制字符串的`strcpy`、比较字符串的`strcmp`以及拼接字符串的`strcat`。通过示例代码展示了这些函数的具体应用及注意事项。
220 7
|
2月前
|
C语言
C语言常见字符函数和字符串函数精讲
C语言常见字符函数和字符串函数精讲