栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > C/C++/C#

【暑假自学C语言】 -- 3 字符串与转义字符有关知识

C/C++/C# 更新时间:发布时间: 百科书网 趣学号

目录

前言

一、定义

二、字符串

1.常见问题

2.解决办法

3.测定长度

二、转义字符

1.常见问题

2.都有哪些是转义字符?

         3.举例说明

4.ASCII表

5.测定长度

总结


前言

在编写代码中,用到转义字符与字符串是十分常见的,也是非常必需的知识,现在就分享一下我对字符串和转义字符的认识与理解。


一、定义

由双引号引起的一串字符称为字符串。


二、字符串

我们可以选择用数组将字符串存储起来,已知的表示方法有两种。

1.常见问题

代码如下:

#include
int main()
{
	char arr1[] = "abc";//第一种表示方式
	char arr2[] = { 'a','b','c'};//第二种表示方式
	printf("%sn",arr1);
	printf("%sn",arr2);
	return 0;
}

两个表示方式感觉并没有什么区别,但是编译后,如图:

2.解决办法

第一个正常的将字符串打印出来,而第二种表示字符串就发生了问题,难道代码写的有问题?

这是就用到了我上一篇讲解的监视窗口,那就打开监视窗口,并且观察一下问题出在了哪。

 这是就可以看出数组arr1中有四个,而数组arr2中只有三个,通过对比可以不难发现arr1中有一个“”虽然没有打出来,但是默认就有这个“”,通过我查找资料知道“”是一个结束标志,而不算做字符串中的内容,那是不是我们在第二种表示方法中加入“”就会正常打印字符串了呢?

#include
int main()
{
	char arr1[] = "abc";//第一种表示方式
	char arr2[] = { 'a','b','c',''};//第二种表示方式
	printf("%sn",arr1);
	printf("%sn",arr2);
	return 0;
}

 再次编译

 果然变为正确打印的情况了。

3.测定长度

代码如下:

#include
#include
int main()
{
	char arr1[] = "abc";
	char arr2[] ={'a','b','c',''};
	printf("%dn", strlen(arr1));
	printf("%dn", strlen(arr2));
	return 0;
}

编码结果:

 由此可以证实''只是作为结束标志,并不计入字符串长度。

二、转义字符

可以转变原来意思的字符

1.常见问题

示例:

如果我要打印“c:test32test.c”

则代码如下:

#include
#include
int main()
{
	printf("c:test32test.c");
	return 0;
}

但是输出结果是我们想象的那样吗?

 看到这可能已经懵了,为什么printf()打印出这个东西,这时代码内部就用到了转义字符

2.都有哪些是转义字符?

?   在书写多个问号时,防止被解析为三字母词

'     表示字符常量’

“     表示一个字符串内部双引号

\      表示一个反斜杠,防止被解释为转义序列符

a     警告字符,蜂鸣

b      退格符

f       进纸符

n      换行

r       回车

t       水平制表符

v       垂直制表符

ddd   1-3个八进制数字。如32可以表示为32

xdd    两个十六进制数字

3.举例说明

示例:

#include
int main()
{
	printf("%cn", 'x61');
	return 0;
}

编译结果如下:

 可以看出只打印了一个a,这是因为ASCII表中十六进制打印出的字符是固定的。

4.ASCII表
二进制十进制十六进制字符/缩写解释
00000000000NUL (NULL)空字符
00000001101SOH (Start Of Headling)标题开始
00000010202STX (Start Of Text)正文开始
00000011303ETX (End Of Text)正文结束
00000100404EOT (End Of Transmission)传输结束
00000101505ENQ (Enquiry)请求
00000110606ACK (Acknowledge)回应/响应/收到通知
00000111707BEL (Bell)响铃
00001000808BS (Backspace)退格
00001001909HT (Horizontal Tab)水平制表符
00001010100ALF/NL(Line Feed/New Line)换行键
00001011110BVT (Vertical Tab)垂直制表符
00001100120CFF/NP (Form Feed/New Page)换页键
00001101130DCR (Carriage Return)回车键
00001110140ESO (Shift Out)不用切换
00001111150FSI (Shift In)启用切换
000100001610DLE (Data Link Escape)数据链路转义
000100011711DC1/XON
(Device Control 1/Transmission On)
设备控制1/传输开始
000100101812DC2 (Device Control 2)设备控制2
000100111913DC3/XOFF
(Device Control 3/Transmission Off)
设备控制3/传输中断
000101002014DC4 (Device Control 4)设备控制4
000101012115NAK (Negative Acknowledge)无响应/非正常响应/拒绝接收
000101102216SYN (Synchronous Idle)同步空闲
000101112317ETB (End of Transmission Block)传输块结束/块传输终止
000110002418CAN (Cancel)取消
000110012519EM (End of Medium)已到介质末端/介质存储已满/介质中断
00011010261ASUB (Substitute)替补/替换
00011011271BESC (Escape)逃离/取消
00011100281CFS (File Separator)文件分割符
00011101291DGS (Group Separator)组分隔符/分组符
00011110301ERS (Record Separator)记录分离符
00011111311FUS (Unit Separator)单元分隔符
001000003220(Space)空格
001000013321!
001000103422"
001000113523#
001001003624$
001001013725%
001001103826&
001001113927'
001010004028(
001010014129)
00101010422A*
00101011432B+
00101100442C,
00101101452D-
00101110462E.
00101111472F/
0011000048300
0011000149311
0011001050322
0011001151333
0011010052344
0011010153355
0011011054366
0011011155377
0011100056388
0011100157399
00111010583A:
00111011593B;
00111100603C<
00111101613D=
00111110623E>
00111111633F?
010000006440@
010000016541A
010000106642B
010000116743C
010001006844D
010001016945E
010001107046F
010001117147G
010010007248H
010010017349I
01001010744AJ
01001011754BK
01001100764CL
01001101774DM
01001110784EN
01001111794FO
010100008050P
010100018151Q
010100108252R
010100118353S
010101008454T
010101018555U
010101108656V
010101118757W
010110008858X
010110018959Y
01011010905AZ
01011011915B[
01011100925C
01011101935D]
01011110945E^
01011111955F_
011000009660`
011000019761a
011000109862b
011000119963c
0110010010064d
0110010110165e
0110011010266f
0110011110367g
0110100010468h
0110100110569i
011010101066Aj
011010111076Bk
011011001086Cl
011011011096Dm
011011101106En
011011111116Fo
0111000011270p
0111000111371q
0111001011472r
0111001111573s
0111010011674t
0111010111775u
0111011011876v
0111011111977w
0111100012078x
0111100112179y
011110101227Az
011110111237B{
011111001247C|
011111011257D}
011111101267E~
011111111277FDEL (Delete)删除

从前文可以知道x61为十六进制数字即从表中对应一下,即可看出应该打印字符a。

5.测定长度

那么我们一个转义字符的长度都是多少呢,不妨写个代码来看会输出什么

代码如下:

#include
#include
int main()
{
	printf("%dn",strlen("c:test32test.c"));
	return 0;
}

编译结果如下:

仔细数数就可以知道一个转义字符只算一个字节长度

总结

今天主要学习了字符串和转义字符,了解了数组存放字符串时不同表示方法引发的不同的结果。

了解了转义字符以及认识转义字符、转义字符的使用。

测定字符串的长度

ASCII表的熟悉

如果有什么错误,欢迎直接在评论区指正。

谢谢大家支持

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1033063.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号