串pos什么意思(数据结构-串)

快鱼网 27 0

串的基本概念:串是由零个或多个任意字符组成的字符序列。

一般记作:s=‘a1 a2 an’。 其中s是串名;在本书中,用单引号作为串的定界 符,引号引起来的字符序列为串值,引号本身不属于串的内容; ai(1<=i<=n)是一个任意字符,可以是字母、数字或 其它字符,它称为串的元素,是构成串的基本单位,i 是它在整个串中的序号; n为串的长度,表示串中所包含的字符个数,当n=0 时,称为空串,通常记为Ф 。

注意:空串和空白串(通常将仅由一个或多个空格 组成的串称为空白串(Blank String))。

串的类型定义:串中任意个连续字符组成的子序列称为该串的子串;包含子串的串相应地称为主串; 通常将子串在主串中首次出现时的该子串的首字符对应 的主串中的序号,定义为子串在主串中的位置。

例如,设A和B分别为 A=‘This is a string’ B=‘is’ 则B是A的子串,A为主串。B在A中出现了两次,其中首次出现所对应的主串位置是3。因此,称B在A中的位置为3。 特别地,空串是任意串的子串,任意串是其自身的子串。

串的基本操作:

1.{结构初始化} StrAssign (&T, chars) 初始条件:chars 是串常量。 操作结果:生成一个其值等于 chars的串T。

串的抽象数据类型定义 StrCopy (&T, S) 初始条件:串 S 存在。 操作结果:由串 S 复制得串 T。

2.{销毁结构} DestroyString (&S) 初始条件:串 S 存在。 操作结果:串 S 被销毁。

3.{引用型操作} StrEmpty (S) 初始条件:串 S 存在。 操作结果:若 S 为空串,则返回 TRUE,否则返回 FALSE。 StrCompare (S, T) 初始条件:串 S 和 T 存在。 操作结果:若S>T,则返回值>0;若S=T,则返回值=0; 若S

SubString (&Sub, S, pos, len) 初始条件:串S存在,1≤pos≤StrLength(S)且 0≤len≤StrLength(S)-pos+1。 操作结果:用 Sub 返回串S的第 pos 个字符起长度为 len 的子串。

Index (S, T, pos) 初始条件:串S和T存在,T是非空串,1≤pos≤StrLength(S) 操作结果:若主串S中存在和串T值相同的子串,则返回它在 主串S中第pos个字符之后第一次出现的位置;否 则函数值为0。

4.{加工型操作} ClearString (&S) 初始条件:串 S 存在。 操作结果:将 S 清为空串。 Concat (&T, S1, S2) 初始条件:串 S1 和 S2 存在。 操作结果:用 T 返回由 S1 和 S2 联接而成的新串。 Replace (&S, T, V) 初始条件:串S,T 和 V 存在,T 是非空串。 操作结果:用V替换主串S中出现的所有与T相等的不重叠 的子串。

StrInsert (&S, pos, T) 初始条件:串 S 和 T 存在,1≤pos≤StrLength(S)+1。 操作结果:在串 S 的第 pos 个字符之前插入串 T。 StrDelete (&S, pos, len) 初始条件:串 S 存在,1≤pos≤StrLength(S)-len+1。

操作结果:从串 S 中删除第 pos 个字符起长度为 len 的 子串。 }ADT String 串的抽象数据类型定义

在上述抽象数据类型定义的13种操作中,串赋值 StrAssign、串比较StrCompare、求串长StrLength、 串联接Concat以及求子串SubString等5种操作构成串类型的最小操作子集。即这些操作不可能利用其它操 作来实现,而其它操作均可在这个最小操作子集上实 现。 例如,可利用判等、求串长和求子串等操作实现 串的定位函数 Index(S,T,pos)。

int Index (String S, String T, int pos) { // T为非空串。若主串S中第 pos 个字符之后存在与T相等的子串, // 则返回第一个这样的子串在S中的位置,否则返回0。

if (pos > 0) { n = StrLength (S); m = StrLength (T); // 求得串长 i = pos; while ( i <= n-m+1) { SubString (sub, S, i, m); // 取得从第 i 个字符起长度为 m 的子串 if (StrCompare (sub,T) != 0) ++i ; else return i ; // 找到和 T 相等的子串 } // while } // if return 0; // S 中不存在满足条件的子串 } // Index

串的表示和实现:如果在程序设计语言中,串只是作为输入/ 输出的常量出现,则只需要存储这个串常量值, 即字符序列即可。但在多数非数值处理的程序中, 串也以变量的形式出现。则需要根据串操作的特点,合理地选择和设计串值的存储结构及其维护方式。

串有三种机内表示方法。

串的表示和实现 一、定长顺序存储表示; 二、串的堆分配存储表示; 三、串的块链存储表示;

定长顺序存储表示

串长有两种表示方法:

1.如上述定义描述的那样,以下标为0的数组分量存放 串的实际长度,如PASCAL语言中采用的串类型采用这 种表示方法;

2. 在串值后面加一个不计入串长的的结束标记字符。 如,C语言中以字符`\0′表示串值的终结。此时的串长为隐含值,显然不便于进行某些操作。

定长顺序存储表示 例如C语言中串不是预定义的数据类型,而是以字符 数组来表示串。如声明 char str[10]; 表明str是一个串变量。C语言中还规定了一个"串的 结束标志 '\0'",即数组中在该结束标志之前的字符是串变量的有效字符,但结束标志本身要占一个字符的空间, 因此串变量str的值(字符序列)的实际长度可在这个定 义范围内随意,但最大不能超过9。

串联接操作 Status Concat (SString &T,SString S1,SString S2) {// 以T返回由S1和S2联接而成的新串 if(S1[0] +S2[0] <= MAXSTRLEN){// 未截断 T[1...S1[0]] = S1[1..S2[0]; T[S1[0]+1..S1[0]+S2[0]]= S2[1..S2[0]] ; T[0] = S1[0]+S2[0]; uncut = TRUE; ] else if(S1[0] < MAXSTRLEN){//截断 …… } else{ //截断(仅取S1) …… }

求子串操作 Status SubString (SString &Sub,SString S,int pos,int len ) { // 若参数合法(即1≤pos≤StrLength(S) 且 // 0≤len≤StrLength(S)-pos+1),则以Sub带回串S中第pos个 // 字符起长度为len的子串,并返回TRUE,否则返回FALSE if (pos < 1 || pos > slen || len < 0 || len > slen-pos+1) return FALSE; Sub[1..len] = S[pos..pos+len-1]; Sub[0] = len; return TRUE; } // SubString

其他两个串的比较复杂,先介绍到这里~

标签: 引号

抱歉,评论功能暂时关闭!