C语言字符与字符串详解(含ASCLL编码、字符串隐含条件、转义字符)

目录

一、字符与字符串的定义

二、ASCLL编码

三、ASCLL码表相关规律

 四、ASCLL码值规律的相关应用

 五、字符与字符串对应打印格式

六、字符串的隐含条件

七、字符串的数组存储与指针存储

八、转义字符


一、字符与字符串的定义

        当我们看向我们的键盘,除去空格、回车、control、shift等功能键外,剩下的键都标记着各种英文字母、数字、“#,^,*”等符号(仅英文输入法下),这类符号就组成了字符与字符串。

        那如何准确区分字符与字符串呢?我们来看定义:

字符:字符是计算机中最基本的数据单位,它代表着一个字符,比如字母、数字或者符号等。在大部分编程语言中,字符通常用单引号括起来,比如 'a' 或者 '9'。

字符串:字符串是由零个或多个字符组成的序列。它可以包含任意字符,比如字母、数字、符号、空格等。在大部分编程语言中,字符串通常用双引号或者单引号括起来,比如 "Hello World!" 或者 '12345'。(注:c语言规定字符串用双引号括起来

二、ASCLL编码

        我们知道电脑只能识别二进制编码,那么也就意味着一个字符在内存中是以二进制形式存储的,那么字符就有对应的二进制值,为了不造成读取混乱,方便使用者互相通信,后来美国国家标准学会(ANSI)出台了⼀个标准ASCII编码C语言中的字符就遵循了ASCII编码的方式

例:A B C 对应ASCLL码值为 65 66 67,其余同操作可观察(除0~31号

三、ASCLL码表相关规律

        ASCII码表规律是一种规律性的编码系统,用于将字符和数字转化为二进制数。规律如下:

  1. ASCII码表共有128个编码,从0到127。(一个char类型变量只有八个bit位存二进制数

  2. 前32个编码(0-31)是控制字符,用于控制计算机的操作。

  3. 第33到126个编码是可打印字符,包括大写字母、小写字母、数字、标点符号等。

  4. 第127个编码是删除字符。

  5. ASCII码表中的字符按照顺序排列,相邻的字符在编码上相差1

  6. 大写字母的编码范围是65-90小写字母的编码范围是97-122,数字的编码范围是48-57,标点符号的编码范围是33-47和58-64和91-96和123-126。

  7. 小写字母ASCLL码值大于大写字母ASCLL码值、对应大小写字母ASCLL码值相差32数字也有ASCLL码值且相应数字字符之间ASCLL码值差值为其数字数值之差

 四、ASCLL码值规律的相关应用

针对 三、7:

        哇!ASCLL码值的使用好厉害啊,要不要可以记忆呢?其实我们并不需要将ASCLL码值完全记忆下来,需要时查询即可,但有些ASCLL码值与其规律还是记忆一下方便使用,如:

1.字符A~Z的ASCII码值从65~90
2.字符a~z的ASCII码值从97~122对应的大小写字符(a和A)的ASCII码值的差值是32

3.数字字符0~9的ASCII码值从48~57
4.换行 ‘\n’ 的ASCII值是:10
5.在这些字符中ASCII码值从0~31这32个字符是不可打印字符,无法打印在屏幕上观察

 五、字符与字符串对应打印格式

1.直接打印

字符串是支持直接用printf库函数直接进行打印的。

2.占位格打印

字符对应的打印格式为%c,字符串对应答应格式为%s(%s打印从字符串首元素地址起直至末尾\0

当然我们可以使用%d来打印字符的ASCLL码值

六、字符串的隐含条件

        什么!?字符串还藏了一手?对!字符串还真值得深挖。一个字符类型变量就只能存一个字符,那字符串这老长,怎么存?这里我们必须知道,字符串是字符的集合,集合集合,那不就一连续空间不就一数组吗?是的,再来为啥printf库函数可以直接打印字符串啊?printf库函数不是接收地址么,那也就意味着字符串传了个地址?对!

取自printf - C++ Reference (cplusplus.com)供参考

使用%s去打印字符串时,是如何知道字符串打印完全停止的呢?一个字符串也许没有我们所看到的那么单纯,其末尾隐藏用一个'\0'以作为字符串结束的标志

我们可以发现数组最后一个元素为‘\0’,这是并未在字符串中显示的,也就意味着一个每个字符串实际字符个数比所见字符个数多1

那么下图两数组元素相同么?

答案是不同的,arr2元素少了‘\0’

七、字符串的数组存储与指针存储

字符串的存储有两种形式,分别为数组存储指针存储

其二者有什么区别呢?

1.数组存储是可以改变其值而指针存放不可

改arr2时程序直接崩掉了……

所以对于用指针来存储的字符串,我们常用const来进行修饰,即 const char* arr2

2.指针存储相当于创建了一个字符串常量

两个指针指向同一空间,而两个数组存放字符串使用的空间不一样。

八、转义字符

也许在前面的代码中你看到 \n , \0 很纳闷是啥。其实在字符中有⼀组特殊的字符是转义字符,转义
字符顾名思义:转变原来的意思的字符

C语言中像这样的转义字符还有一些,具体如下:
• \? :在书写连续多个问号时使用,防止他们被解析成三字母词(? :),在新的编译器上没法验证了。
• \' :用于表示字符常量  ’
• \" :用于表示一个字符串内部的双引号
• \\ :用于表示一个反斜杠,防止它被解释为⼀个转义序列符
• \a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发生。
• \b :退格键,光标回退一个字符,但不删除字符。
• \f :换页符,光标移到下一页。在现代系统上,这已经反映不出来了,行为改成类似于 \v 。
• \n :换行符。
• \r :回车符,光标移到同一行的开头。
• \t :制表符,光标移到下一个水平制表位,通常是下一个8的倍数。
• \v :垂直分隔符,光标移到下一个垂直制表位,通常是下一行的同一列。
下面2种转义字符可以理解为:字符的8进制或者16进制表示形式
• \ddd :ddd表示1~3个八进制的数字。如\130表示字符X
• \xdd :dd表示2个十六进制数字。如:\x30表示字符0
•\0 :null字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,用于字符串的结束标志,其
ASCII码值是0。

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值