抚州新楼盘2017年价格:C++语言中提供有关串的类

来源:百度文库 编辑:中科新闻网 时间:2024/05/06 15:59:40
请说出各个类的成员函数,以及用法

楼上那为列举的各个函数都是C中的字符串操作,不是C++中的。
C++中的功能更为强大。有
String.compare()
String.length()
等。

相关的类由String标准库中查到。 msdn中有详细描述。

第四章:串(包括习题与答案及要点)

本章介绍了串的逻辑结构,存储结构及串上的基本运算,由于在高级语言中已经提供了较全善的串处理功能,因此本章的重点是掌握在串上实现的模式匹配算法。同时这也是本章的难点。但是从全书来讲,这属于较简单的一章内容。

--------------------------------------------------------------------------------

1.串及其运算(领会)(这些内容比较容易理解,不用死记)

串就是字符串,是一种特殊的线性表,它的每个结点仅由一个字符组成。

空串:是指长度为零的串,也就是串中不包含任何字符(结点)。

空白串:指串中包含一个或多个空格字符的串。不同与空串,它的结点就是一个空格字符。

在一个串中任意个连续字符组成的子序列称为该串的子串,包含子串的串就称为主串。子串在主串中的序号就是指子串在主串中首次出现的位置。如A="I love you" B="love",则B在A中的序号为3,注意空格也是字符。

空串是任意串的子串,任意串是他自身的子串?

串分为两种:串常量和串变量。串常量在程序中不能改变,串变量则可以。

关于串的基本运算,基本上在C语言中已经学过,主要有

求串长strlen(char *s)、

串复制strcpy(char *to,char *from)、

串联接strcat(char *to,char *from)、

串比较charcmp(char *s1,char *s2)

和字符定位strchr(char *s, char c)等

这些基本运算通过练习来掌握。

--------------------------------------------------------------------------------

2.串的存储结构(简单应用)

串是特殊的线性表(结点是字符),所以串的存储结构与线性表的存储结构类似。

串的顺序存储结构简称为顺序串,顺序串又可按存储分配的不同分为静态存储分配的顺序串和动态存储分配的顺序串。

静态的意思可简单地理解为一个确定的存储空间,它的长度是不可变的。如直接使用定长的字符数组来定义一个串。它的优点是涉及串长的操作速度快,因为它的最大长度是不变的。

动态存储分配就是在定义串时不分配存储空间,直到需要使用时按所需串的长度分配存储单元给它,并且在运行中还可以根据需要变化串的长度,这就是动态分配。不过这样的串仍是顺序存储的,也就是说指针指向串的首地址,后面的结点是连续存储的。

串的链式存储就是用单链表的方式存储串值,串的这种链式存储结构简称为链串。链串与单链表的差异只是它的结点数据域为单个字符。这种存储结构方便于串的插入和删除操作,但是空间利用率不高,因为存放每一个字符要"搭配"一个指向下一字符的地址,而地址所占空间是比较大的。为了解决这种"存储密度"过低的状况,可以让一个结点存储多个字符,事实上这是顺序串和链串的综合(折衷)。

--------------------------------------------------------------------------------

本章的重点和难点就是串运算的实现,特别是顺序串上子串定位的运算。

子串定位运算又称串的"模式匹配"或"串匹配",就是在主串中查找出子串出现的位置,这在应用中非常广泛,比如文本编辑中的"查找和替换"用到的就是子串定位运算的算法。

在串匹配中,将主串称为目标(串),子串称为模式(串),我们这样想象,子串就如同一个模板(样本),用它在目标上对比,从头往后比较,凡是遇到一模一样的那么一段,就算找到一个位置了(我们就说,从这个位置开始的匹配成功)。用很专业的很酷的话说就是"模式在目标中出现"(我想起了警匪片里的对话),如果这个模板对应的目标串中有不一样的字符出现,那么这个位置就匹配失败。

当我们用这个模子依次从目标的头部往后移,移动到的位置就叫位移,如果每次向右移动1格,那么每次的位移就加上1。

每次移动后要看看模板里的字符和目标中相应的字符是否相等,如果都相同,这次位移就叫有效位移(其实就是从这个位置开始的匹配成功)

另外有一个合法位移和不合法位移的概念,就是说,移动一个位置后,如果模板的最后一个字符还没有超出目标串中最后一个字符时,这个位移就是合法位移,如果超出了,那么就没有比较的意义了,这时就是不合法位移。

这是比较容易理解的,串匹配问题就是找出给定模式串P在给定目标串T中首次出现的有效位移或者是全部有效位移。

具体的串匹配算法也不是很难理解,就是用两个循环,外循环用于进行模式的位移,内循环进行模板内每个字符的比较(判断是否有效位移)。关于串匹配的时间复杂度,在最坏的情况下就是目标串和模式串分别是"a^n-1b"和"a^m-1b"的形式,就是说,每一次合法位移后,在内循环中都要比较m个字符才知道是不是有效位移(前面的字符都是一样的)。所以最坏的情况下时间复杂度是O((n-m+1)m),假如m与n同阶的话则它是O(n^2)。

链串上的子串定位运算的不同之处就是位移是结点地址而不是整数。理解一下算法即可。

真正的应用主要还是要掌握串的基本算法并用它们构造出可以解决具体问题的简单算法。

第四章 串 复习要点

本章复习要点是:

串是一种特殊的线性表,它的结点仅由一个字符组成。

空串与空白串的区别:空串是长度为零的串,空白串是指由一个或多个空格组成的串。

串运算的实现中子串定位运算又称串的模式匹配或串匹配。

串匹配中,一般将主串称为目标(串),子串称为模式(串)。

本章可能出的题型多半为选择、填空等。

wen tan hao qiang haoshi