- 👋 Hi, I’m @Beast Cheng
- 👀 I’m interested in photography, hiking, landscape…
- 🌱 I’m currently learning python, javascript, kotlin…
- 📫 How to reach me --> 458290771@qq.com
喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑💻
此外,《程序员必备技能》专栏日后会逐步更新,感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏
定义
串,即字符串(String) 是由零个或多个字符组成的有限序列
一般记为: S = ′ a 1 a 2 . . . . . . a n ′ ( n ≥ 0 ) S='a_1a_2 ......a_n'\,\,\,(n \geq 0) S=′a1a2......an′(n≥0)
其中,S是串名,单引号括起来的字符序列是串的值; a i a_i ai 可以是字母、数字或其他字符;串中字符的个数n称为串的长度。 n = 0 n=0 n=0 时的串称为空串 (用 ∅ \emptyset ∅ 表示)
例:
S = "Hello World!"
T = "iPhone 11 Pro Max?"
- 子串:串中任意个连续的字符组成的子序列。
- 如:
iPhone
,Pro M
,并且这个子串也可以是 0 个,也就是说,空串也是子串
- 如:
- 主串:包含子串的串。
- 如:T 是
iPhone
的主串
- 如:T 是
- 字符在主串中的位置:字符在串中的序号。
- 如:1 在 T 中 的位置是 8(第一次出现)
- 子串在主串中的位置:子串的第一个字符在主串中的位置。
- 如:11Pro 在 T 中的位置为 8
所谓的空串和空格串是不一样的:M=''
M 是空串,N=' '
N 是空格串,中间有很多空格字符占位
串和线性表对比
串是一种特殊的线性表,数据元素之间呈线性关系
串的数据对象限定为字符集(如中文字符、英文字符、数字字符、标点字符等)
串的基本操作,如增删改查等通常以子串为操作对象
基本操作
假设有串 T = ""
, S = "iPhone 11 Pro Max?"
, W = "Pro"
StrAssign(&T, chars)
:赋值操作——把串 T 赋值为 chars
StrCopy(&T, S)
:复制操作——由串 S 赋值得到串 T
StrEmpty(S)
:判空操作——若S为空串,返回 true,否则返回 false
StrLength(S)
:求串长——返回串 S 元素的个数
ClearString(&S)
:清空操作——将 S 清为空串
DestroyString(&S)
:销毁串——将串 S 销毁(回收存储空间)
Concat(&T, S1, S2)
:串连接——用 T 返回由 S1 和 S2 连接而成的新串
- 如:执行基本操作
Concat(&T, S, W)
之后,T = "iPhone 11 Pro Max?Pro"
SubString(&Sub, S, pos, len)
:求子串——用 Sub 返回串 S 的第 pos 个字符起 长度为 len 的子串 - 如:执行基本操作
SubString(&T, S, 4, 6)
之后,T = "one 11"
Index(S, T)
:定位操作——若主串 S 中存在与串 T 值相同的子串,则返回它在主串 S 中第一次出现的位置;否则函数值为 0 - 如:执行
Index(S, W)
之后,返回值为 11
StrCompare(S, T)
:比较操作——若 S > T ,则返回值 > 0;若 S = T ,则返回值 = 0;若 S < T,则返回值 < 0 - 从第一个字符开始依次往后对比,先出现更大字符的串就更大
- 长串的前缀和短串相同时,长串更大
- 只有两个串完全相同时,才相等
字符集编码
字符集:
- 英文字符——ASCII 字符集
- 中英文——Unicode 字符集
- 基于一个字符集,可以有多种编码方案,如:UTF-8,UTF-16
注意:采用不同的编码方式,每个字符所占空间不同,考研中只需要默认每个字符占 1B 即可
- 基于一个字符集,可以有多种编码方案,如:UTF-8,UTF-16
拓展:乱码问题
很多时候,文件出现乱码的原因就在于:解码的方式出现了错误
也就是说,在你的文件中,原本采用某一套编码规则 y = f(x)
打开文件时,你的软件以为你采用的是另一套编码规则 y = g(x)