3. 字符串作为抽象数据类型
3.1 分层抽象
- 分层抽象(layered abstraction) :建立在不同层次结构上的抽象。
用来表示字符串的分层抽象结构,如下图所示:
完成输入输出的硬件设备自动在ASCII代码和屏幕或键盘上的符号之间进行转换:
计算机对表示字符的整数代码应用算术运算可以处理每个字符。
这些功能组成了可用于字符串的机器级的操作,形成层次结构中的最低一层。
在由硬件提供的基本功能的上面,程序设计语言通常也包括一些对字符串操作的支持。可用于字符串的内嵌操作形成了层次结构中的第二层。
在许多语言中,这些功能是非常强大的,可以直接在语言级完成复杂的字符串操作。
然而,ANSIC在语言本身几乎没有提供任何对字符串的支持。
仅有的支持是提供定义字符串常量功能,所有其他的字符串操作都是由库提供的。
在ANSI C中,可用的大多数字符串操作是由string.h
接口提供的。
然而,某些常用的操作用string.h
接口难以完成。
为了能用概念上较简单的模型处理字符串,本书引入了另一个字符串库,它可以通过strlib.h
接口访问。
#include "strlib.h"
3.2 抽象类型的概念
strlib.h
接口的主要优势在于它能使字符串作为抽象类型来处理。
目前可以把抽象类型(abstract type) 想象为按照它的行为而不是按照它的表示定义的类型。
抽象类型的行为是由能在这种类型的对象上实施的操作来定义的。
特定抽象类型的合法操作被称为它的基本操作(primitive operation),被定义为与该类型相关的接口中的函数。
参考
《C语言的科学和艺术》 —— 第9章 字符串和字符