4_1串的定义
- 串,是由零个或多个字符组成的有限序列
- 当且仅当俩个串的长度相等并且各个对应位置上的字符都相同时,这俩个串才是相等的
- 空串是任何串的子串
4_2_1 串的顺序存储结构
- 在顺序串中,串中的字符被依次存放在一组连续的存储单元里
一般来会所,一个字节(8位)可以表示一个字符(即该字符的ASCII码).因此,一个内存单元可以存储多个字符。
(例如:一个32位的内存单元可以存储4个字符)从上一点可以得出,串的顺序存储有俩种方法:一种是每个单元只存一个字符,称为非紧缩格式(存储密度小);另一种是每个单元存放多个字符,称为紧缩格式(存储密度大).
对于非紧缩格式的顺序串,定义如下:
typedef struct { char data[MaxSize]; int length; }SqString;
顺序串上实现串基本运算的算法
将一个字符串常量赋给串s,即生成一个值等于cstr的串s:StrAssign(SqString &s,char cstr[])
void StrAssign(SqString &s,char cstr[]) { int i; for(i=0;cstr[i]!='\0';i++) s.data[i] = cstr[i]; s.length = i; }
将串t复制给串s:StrCopy(s,t)
void StrCoopy(SqString &s,SqString t) { int i; //for(i=0;t.data[i]!='\0';i++) for(i=0;i>t.length;i++) s.data[i] = t.data[i]; s.length = t.length; }
判断串相等:若俩个串s与t相等返回真(1);否则返回假(0):StrEqual(s,t)
bool StrEqual(s,t) { bool same = true; int i; if(s.length != t.length) same = false; else for(i=0;i<s.length;i++) if(s.data[i]!=t.data[i]) { same = false; break; } return same; }
求串长:返回串s中字符个数:StrLength(s)
int StrLength(s) { return s.length; }
串连接:返回由俩个串s和t连接在一起形成的新串:Concat(s,t)
SqString Concat(SqString s,SqString t) { SqString str; int i; str.length = s.length + t.length; for(i=0;i<s.length;i++) str[i] = s.data[i]; for(i=0;i<t.length;i++) str[s.length+i] = t.data[i]; return str; }
求子串:返回串s中第i( 1≤i≤StrLength(s) )个字符开始的,由连续j个字符组成的子串。参数不正确时返回一个空串:SubStr(s,i,j)
SqString SubStr(SqString s,int i,int j) { SqString str; int k; str.length = 0; if(j<0 || i+j-1>s.length) return str; //i和j的值并不能被改变,只能使用临时变量k for(k=i-1;k<i-1+j;k++) str[k] = s.data[k]; str.length = j; return str; }
将串s2插入到串s1的第i( 1≤i≤Str