C语言新手小白详细教程(8)ASCll编码和字符串

🌏个人博客主页:意疏-CSDN博客

希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~

阅读指南:


开篇说明

本章节我们学习C语言中一个非常重要的概念 字符串。在C语言编程中,字符串是一种非常重要的数据类型。与许多其他编程语言不同,C语言本身并没有直接提供字符串类型,而是通过字符数组来表示字符串。这种表示方法虽然简单,但也带来了一些需要注意的细节和潜在的陷阱。

在C语言中,字符串通常以字符数组的形式存储,并以空字符(\0)作为字符串的结束标志。例如,字符串 "Hello" 在内存中实际上是以 {'H', 'e', 'l', 'l', 'o', '\0'} 的形式存储的。这种表示方法使得字符串的长度可以动态变化,但也要求程序员在处理字符串时必须小心处理字符串的边界和结束标志。

掌握C语言中的字符串处理技巧,不仅能够帮助我们编写出更高效、更安全的代码,还能让我们更好地理解C语言的底层机制。接下来,我们将深入探讨C语言中字符串的各种操作和注意事项。

ASCll编码

ASCII (American Standard Code for Information Interchange美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符,包括英文字母(大写和小写)、数字、标点符号以及控制字符、如换行符或回车符。

我们来举个例子:以便更好的理解ASCll编码

c 复制代码
 #include <stdio.h>  
 int main(){  
     char ch = 'H';  
     printf("ch = %c\n", ch);  
     printf("ch的ASCII码 = %d\n", ch);  
 return 0;  
 }

输出结果是这样子的:

我们可以看到大写H的ASCll码为 72 和下面的编码相对应。读者可以自行一试。


  • 以下为ascll编码表 较长,读者可以拖动目录自行阅读。
十进制 十六进制 字符 描述
0 0x00 NUL 空字符
1 0x01 SOH 标题开始
2 0x02 STX 正文开始
3 0x03 ETX 正文结束
4 0x04 EOT 传输结束
5 0x05 ENQ 询问
6 0x06 ACK 确认
7 0x07 BEL 响铃
8 0x08 BS 退格
9 0x09 HT 水平制表符
10 0x0A LF 换行
11 0x0B VT 垂直制表符
12 0x0C FF 换页
13 0x0D CR 回车
14 0x0E SO 移出
15 0x0F SI 移入
16 0x10 DLE 数据链路转义
17 0x11 DC1 设备控制1
18 0x12 DC2 设备控制2
19 0x13 DC3 设备控制3
20 0x14 DC4 设备控制4
21 0x15 NAK 否定
22 0x16 SYN 同步空闲
23 0x17 ETB 传输块结束
24 0x18 CAN 取消
25 0x19 EM 介质结束
26 0x1A SUB 替换
27 0x1B ESC 转义
28 0x1C FS 文件分隔符
29 0x1D GS 组分隔符
30 0x1E RS 记录分隔符
31 0x1F US 单元分隔符
32 0x20 SP 空格
33 0x21 ! 感叹号
34 0x22 " 双引号
35 0x23 # 井号
36 0x24 $ 美元符号
37 0x25 % 百分号
38 0x26 & 和号
39 0x27 ' 单引号
40 0x28 ( 左括号
41 0x29 ) 右括号
42 0x2A * 星号
43 0x2B + 加号
44 0x2C , 逗号
45 0x2D - 减号
46 0x2E . 句号
47 0x2F / 斜杠
48 0x30 0 数字0
49 0x31 1 数字1
50 0x32 2 数字2
51 0x33 3 数字3
52 0x34 4 数字4
53 0x35 5 数字5
54 0x36 6 数字6
55 0x37 7 数字7
56 0x38 8 数字8
57 0x39 9 数字9
58 0x3A : 冒号
59 0x3B ; 分号
60 0x3C < 小于号
61 0x3D = 等于号
62 0x3E > 大于号
63 0x3F ? 问号
64 0x40 @ 艾特符号
65 0x41 A 大写字母A
66 0x42 B 大写字母B
67 0x43 C 大写字母C
68 0x44 D 大写字母D
69 0x45 E 大写字母E
70 0x46 F 大写字母F
71 0x47 G 大写字母G
72 0x48 H 大写字母H
73 0x49 I 大写字母I
74 0x4A J 大写字母J
75 0x4B K 大写字母K
76 0x4C L 大写字母L
77 0x4D M 大写字母M
78 0x4E N 大写字母N
79 0x4F O 大写字母O
80 0x50 P 大写字母P
81 0x51 Q 大写字母Q
82 0x52 R 大写字母R
83 0x53 S 大写字母S
84 0x54 T 大写字母T
85 0x55 U 大写字母U
86 0x56 V 大写字母V
87 0x57 W 大写字母W
88 0x58 X 大写字母X
89 0x59 Y 大写字母Y
90 0x5A Z 大写字母Z
91 0x5B [ 左方括号
92 0x5C |反斜杠
93 0x5D ] 右方括号
94 0x5E ^ 脱字符
95 0x5F _ 下划线
96 0x60 ` 反引号
97 0x61 a 小写字母a
98 0x62 b 小写字母b
99 0x63 c 小写字母c
100 0x64 d 小写字母d
101 0x65 e 小写字母e
102 0x66 f 小写字母f
103 0x67 g 小写字母g
104 0x68 h 小写字母h
105 0x69 i 小写字母i
106 0x6A j 小写字母j
107 0x6B k 小写字母k
108 0x6C l 小写字母l
109 0x6D m 小写字母m
110 0x6E n 小写字母n
111 0x6F o 小写字母o
112 0x70 p 小写字母p
113 0x71 q 小写字母q
114 0x72 r 小写字母r
115 0x73 s 小写字母s
116 0x74 t 小写字母t
117 0x75 u 小写字母u
118 0x76 v 小写字母v
119 0x77 w 小写字母w
120 0x78 x 小写字母x
121 0x79 y 小写字母y
122 0x7A z 小写字母z
123 0x7B { 左花括号
124 0x7C
125 0x7D } 右花括号
126 0x7E ~ 波浪号
127 0x7F DEL 删除

字符串

字符串是一个或多个的序列,例如:

" i am happy ! "

  1. 字符串的定义:
    字符串:C语言并没有专门存储字符串的变量类型,字符串都被存储在char类型的数组中,数组由连续的存储单元组成,字符串中的字符都被存储在相邻的存储单元中,每个单元存储一个字符。
    问题来了,我们该如果区分字符数组和字符串呢?
    C语言中字符串一定以'\0'(空字符)结束 。这意味着数组的容量必须至少比待存储字符串中的字符数多1.
    注:
    '0'是控制字符,非打印字符,只是做标记,在实际打印时不会被显示的打印。
  2. 字符数组和字符串的输入输出
    1、字符数组的输入输出,用格式符号"%c"逐个输入
    例如:
c 复制代码
#include <stdio.h>

int main(){

    int i;

    char ch[5];

    printf("请输入字符: \n");

    for (i = 0; i < 5; i++)

    {

        scanf("%c", &ch[i]);//ch[i] 是一个char型变量,用来接收输入的字符,&ch[i]表示ch[i]的地址,即ch[i]的指针。(取地址)

    }

    printf("您输入的字符是: \n");

    for ( i = 0; i < 5; i++)

    {

        printf("%c", ch[i]);//输出ch数组中的字符

    }

    printf("\n");

return 0;
}

结果为:

2、字符串的输入输出、将整个字符串 一次输入或输出,用"%s"格式符。

例如:

c 复制代码
#include <stdio.h>

int main(){

    char ch[6];//定义一个字符数组,因为要输入'\0',所以长度要比字符串大 1

    scanf("%s",ch);//数组名前不加&,表示是地址,而不是指针

    printf("%s\n",ch);

return 0;
}

结果为:

什么是以'0'结尾呢?

再举个例子:我们来先定义一个字符串数组

char name[40];

这里我们定义了一个大小为40,类型是char的数组。然后键盘录入一个姓氏,以字符串的形式存储在name中,最后打印。

  • 代码如下:
c 复制代码
#include <stdio.h>

int main(){

    char name[40];

    printf("请输入你的名字: ");

    scanf("%s", name);//字符串转换说明%s 
    //数组名前不加&,C语言中数组名代表数组第一个元素的地址

    printf("我的名字是 %s!\n", name);

return 0;
}

运行结果:

这里当程序看到%s时,就知道你输入的是一个字符串,同样会自动在结尾加上'0'.
当计算机读取到第一个空字符'0'就知道在此之前是一个完整的字符串,并将其输出。


意气风发,漫卷疏狂
学习是成长的阶梯,每一次`的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中。

如果我的博客能给您带来启发,如果您喜欢我的博客内容,请不吝点赞、评论和收藏,也欢迎您关注我的博客。
您的支持是我前行的动力。听说点赞会增加自己的运气,希望您每一天都能充满活力!

愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步。

我是意疏 下次见!

相关推荐
标标大人1 小时前
c语言中的局部跳转以及全局跳转
android·c语言·开发语言
banjin6 小时前
AI驱动TDSQL-C Serverless 数据库技术实战营-ai学生选课系统数据分析
c语言·人工智能·serverless
DdddJMs__1356 小时前
C语言 | Leetcode C语言题解之第413题等差数列划分
c语言·leetcode·题解
轩轶子6 小时前
【C-项目】网盘(一期,无限进程版)
服务器·c语言·网络
0224号比邻星6 小时前
[C语言]第十节 函数栈帧的创建和销毁一基础知识到高级技巧的全景探索
c语言·开发语言
QXH2000007 小时前
Leetcode—环形链表||
c语言·数据结构·算法·leetcode·链表
爱编程的小新☆10 小时前
C语言内存函数
c语言·开发语言·学习
snowful world12 小时前
vs2022链表的创建和打印(c语言版)
c语言·数据结构·链表
小周的C语言学习笔记13 小时前
鹏哥C语言33---循环语句 for
c语言·c++·算法
LaoWaiHang13 小时前
C语言从头学60——学习头文件math.h(三)
c语言