跳转到内容

应用编程/字符串

50% developed
来自维基教科书,开放的书籍,为开放的世界

字符串

[编辑 | 编辑源代码]

字符串函数

[编辑 | 编辑源代码]

字符串函数用于计算机编程语言中操作字符串或查询有关字符串的信息(有些两者都做)。

大多数具有字符串数据类型的编程语言都将具有一些字符串函数,尽管每种语言中可能还有其他低级方法可以直接处理字符串。在面向对象的语言中,字符串函数通常作为字符串对象的属性和方法实现。在函数式和基于列表的语言中,字符串表示为列表(字符代码),因此所有列表操作过程都可以被认为是字符串函数。但是,此类语言也可能实现一个明确的字符串特定函数子集。

对于操作字符串的函数,现代面向对象的语言,如 C# 和 Java 具有不可变字符串并返回副本(在新建的动态内存中分配),而其他语言,如 C 操作原始字符串,除非程序员将数据复制到新的字符串。例如,参见下面的连接

字符串函数的最基本示例是length(string)函数。此函数返回字面量字符串的长度。

例如,length("hello world")将返回 11。

其他语言可能具有语法或参数或结果类似或完全相同的字符串函数。例如,在许多语言中,长度函数通常表示为len(string)


字符串数据类型

[编辑 | 编辑源代码]

字面量字符串

[编辑 | 编辑源代码]

非文本字符串

[编辑 | 编辑源代码]

字符串处理算法

[编辑 | 编辑源代码]

游程编码

[编辑 | 编辑源代码]

游程编码 (RLE) 是一种无损数据压缩形式,其中数据运行(相同数据值在许多连续数据元素中出现的序列)存储为单个数据值和计数,而不是作为原始运行。这在包含许多此类运行的数据上最为有用。例如,考虑简单的图形图像,例如图标、线图、康威的生命游戏和动画。对于没有许多运行的文件,它没有用,因为它可能会大大增加文件大小。

RLE 也可用于指代 CompuServe 支持的早期图形文件格式,用于压缩黑白图像,但已被他们后来的图形交换格式 (GIF) 广泛取代。RLE 还指代 Windows 3.x 中很少使用的图像格式,扩展名为 rle,它是一种运行长度编码位图,用于压缩 Windows 3.x 启动屏幕。

示例

例如,考虑一个包含纯黑色文本和纯白色背景的屏幕。空白处将有许多白色的像素长运行,而文本中将有许多黑色的像素短运行。假设扫描线,B 表示黑色像素,W 表示白色,可能如下所示

   WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW 

将运行长度编码 (RLE) 数据压缩算法应用于上述假设扫描线,它可以呈现如下

   12W1B12W3B24W1B14W 

这可以解释为十二个 W 的序列、一个 B、十二个 W、三个 B 等,

运行长度代码用仅 18 个字符表示了原始的 67 个字符。虽然图像存储实际使用的格式通常是二进制,而不是像这样使用 ASCII 字符,但原理保持不变。即使是二进制数据文件也可以使用这种方法进行压缩;文件格式规范通常将重复的字节在文件中定义为填充空间。但是,DEFLATE 等更新的压缩方法通常使用基于 LZ77 的算法,这是运行长度编码的推广,可以利用字符串的运行(例如 BWWBWWBWWBWW)。

运行长度编码可以用多种方式表达,以适应数据属性以及其他压缩算法。例如,一种流行的方法只对两个或多个字符的运行进行编码,使用“转义”符号来标识运行,或者使用字符本身作为转义,这样每当一个字符出现两次时就表示一个运行。在前面的示例中,这将给出以下结果

   WW12BWW12BB3WW24BWW14

这将被解释为十二个 W 的运行、一个 B、十二个 W 的运行、三个 B 的运行等。在运行不太频繁的数据中,这可以显着提高压缩率。

另一个问题是其他压缩算法的应用。即使提取了运行,不同字符的频率也可能很大,从而可以进一步压缩;但是,如果运行长度在文件中以运行发生的 location 写入,则这些数字的存在会中断正常流程,并使压缩变得更加困难。为了克服这一点,一些运行长度编码器将数据和转义符号与运行长度分开,以便这两个可以独立处理。对于示例数据,这将产生两个输出,字符串“WWBWWBBWWBWW”和数字(12,12,3,24,14)。

转义序列

[编辑 | 编辑源代码]

什么是它?

[编辑 | 编辑源代码]

程序员将“反斜杠 (\)”字符称为转义字符。换句话说,当我们在字符串中使用它时,它具有特殊含义。顾名思义,转义字符会短暂地转义字符串中的字符,以引入独特的包含。也就是说;反斜杠表示它后面的下一个字符具有不同的含义。[1]

Python 中的示例

[编辑 | 编辑源代码]

[2] [3]

单引号

string = 'That\'s my bag.'
print(string)

输出

That's my bag.

此示例使用 (\') 在字符串中打印单引号。

双引号

 string = "\"Python\""
 print(string)

输出

"Python"

此示例使用 (\") 删除反斜杠并将引号放入字符串中。

换行符

 string = 'applied \nprogramming'
 print(string)

输出

applied
programming

换行符用于在新的独立行中写入单词。

反斜杠

 string = 'applied\\ programming'
 print(string)

输出

applied\ programming

此示例打印单个反斜杠。

空格

 string = 'applied\tprogramming'
 print(string)

输出

applied programming

此示例在单词之间添加空格。

退格键

 string = 'applied \bprogramming'
 print(string)

输出

appliedprogramming

此示例使用 "\b" 删除单词之间的空格。

十六进制值

 string = "\x50\x59\x54\x48\x4f\x4E"
 print(string)

输出

PYTHON

此示例使用 \xhh 将十六进制值转换为字符串。

 string = "Nancy said \x22Hello World!\x22 to the crowd."
 print(string)

输出

Nancy said "Hello World!" to the crowd.

此示例使用 "\x" 表示接下来的两个字符是十六进制数字,“22”是十六进制中双引号的 ASCII 值。

八进制值

 string = "\120\131\124\110\117\116"
 print(string)

输出

PYTHON

此示例使用 \ooo 将八进制值转换为普通字符串。

关键术语

[编辑 | 编辑源代码]

连接 - 连接两个字符字符串。也称为“连接”。

控制字符 - 用于执行操作,而不是在屏幕上显示可打印字符。易于理解的示例包括“Escape”、“Backspace”和“Delete”。[4]

转义序列 - 一组字符,其含义不同于其中包含的文字字符。[5]

固定长度字符串 - 长度预先确定且固定不变的字符串。

迭代 - 重复一个过程以生成结果。[6]

前缀 - 如果字符串 A = a1, a2, …an 满足 m ≤ n,则 A 的前缀 Â = a1, a2, … am。字符串 A 的真前缀与其本身不相同(0 ≤ m < n)。[7]

游程编码 (RLE) - 一种数据压缩形式,其中输入为数据流(例如“AAABBCCCC”),输出为一行连续数据值的计数序列(例如“3A2B4C”)。[8]

字符串 - 通常用引号括起来的字符数组。

字符串字面量 - 编程中用于在计算机程序源代码中表示字符串值的一种字面量类型。[9]

子字符串 - 当一个字符串是原始字符串后缀的前缀,反之亦然,就会发生这种情况。[7]

后缀 - 包含原始字符串最后一个字母的原始字符串的任何子字符串,包括它本身。字符串的真后缀不等于/与原始字符串本身相同。[7]

可变长度字符串 - 长度可以变化的字符串,通常由用户输入决定。

参考资料

[编辑 | 编辑源代码]
华夏公益教科书