1.顺序串的基本定义
typedef struct{
char data[MaxSize];
int length; //存放串长
}SqString;
2.生成串 StrAssign(&s,cstr) 将一个 字符串常量cstr(以’\0’字符标识结尾)赋给顺序串 s)
void StrAssign(SqString &s, char cstr[]){
int i;
for(i=0;cstr[i]!='\0';i++)
s.data[i]=cstr[i];
s.length=i;
}
3.串的复制
void StrCpy(SqString &s, SqString t) {
//注意S为引用型参数
int i;
for(i = 0; t[i] != '\0'; i++)
s.data[i] = t.data[i];
s.length = i;
}
4.判断串相等 StrEqual(s,t)
bool StrEqual(SqString s, SqString t) {
bool same = true;
int i;
if(s.length != t.length) //长度不相同时返回0
same = false;
else
for(i = 0; i < s.length; i++)
if(s.data[i] != t.data[i]) {
//只要有一个不相等时返回假
same = false;
break;
}
return same;
}
5.串的连接(返回由两个顺序串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.data[i] = s.data[i]; //将s.data[0.1.2...s.len-1]复制到 str
for(i = 0; i < t.length; i++)
str.data[s.length+i] = t.data[i]; //将 t.data[0.1.2...t.length-1]复制到str
return str; //返回结果串
}
6.求子串 SubStr(s,i,j)(返回顺序串s中从第i(1<=i<=n)个字符开始的由连续j个字符组成的子串。当参数不正确时返回一个空串)
SqString SubStr(SqString s,int i,int j){
int k;
SqString str; //定义结果串
str.length=0; //设置str为空串
if(i<=0||i>s.length||j<0||i+j-1>s.length)
return str; //参数不正确时候返回空串
for(k=i-1;k
7.子串的插入InsStr(S1,i,S2)(将顺序串S2插入到顺序串S1的第i(1<=i<=n+1)个位置上,并返回产生的结果串。当参数不正确时返回一个空串)
SqString InsStr(SqString s1,int i,SqString s2){
int j;
SqString str; //定义结果串
str.length=0; //设置str为空串
if(i<=0||i>s1.length+1)
return str; //参数正确时返回一个空串
for(j = 0;j < i-1;j++)
str.data[j]=s1.data[j]; //首先将 s1.data[0.1.2...i-2]复制到str中
for(j = 0;j < s2.length; j++)
str.data[i+j-1]=s2.data[j]; //再将要插入的s2.data[0.1.2...s2.length-1]复制到str中,这里要注意下标问题,str的下标为 i+j-1
for(j = i-1; j
8.子串的删除 DelStr(s,i,j)(在顺序串s中删除从第i(1<=i<=n)个字符开始的长度为j的子串,并返回产生的结果.当参数不正确时返回一个空串)
SqString DelStr(SqString s,int i,int j){
int k;
SqString str; //定义结果串
str.length=0; //设置str为空串
if(i<=0||i>s.length||i+j-1>s.length)
return str; //参数不正确时候返回空串
for(k = 0;k
9.子串的替换 RepStr(SqString s,int i,int j,SqString t)
//(在顺序串s中将第i(1<=i<=n)个字符开始的长度为j的子串用顺序串t替换,并返回产生的结果.当参数不正确时返回一个空串)
SqString RepStr(SqString s,int i,int j,SqString t){
int k;
SqString str; //定义结果串
str.length=0; //设置str为空串
if(i<0||i>s.length||i+j-1>s.length)
return str; //参数不正确的时候返回一个空串
for(k = 0;k < i-1;k++)
str.data[k]=s.data[k]; //首先将s.data[0.1.2.3...i-2]复制到str中
for(k = 0;k < t.length; k++)
str.data[i+k-1]=t.data[k]; //再将t.data[0.1.2...t.length-1]复制到str中
for(k=i+j-1;k
10.输出串 DispStr(s)
void DispStr(SqString s){
int i;
if(s.length>0){
for(i = 0; s[i]!='\0';i++)
printf("%c",s[i]);
printf("\n");
}
}
例子:假设采用顺序串存储,设计一个算法 Strcmp(s,t) 按字典顺序比较两个串s和t的大小。
(1)比较s和t两个串共同长度范围内的对应字符:
1. 若s的字符大于t的字符,返回1;
2. 若s的字符小于t的字符,返回-1;
3 若s的字符等于t的字符,按照上述规则继续比较。
(2)当(1)中的对应字符均相同时比较s和t的长度:
1.两者相等返回0
2.s的长度大于t的长度,返回1;
3.若s的长度小于t的长度,返回-1;
对应的算法如下:**
int Strcmp(SqString s,SqString t){
int i,comlen;
if(s.lengtht.data[i])
return 1;
else if(s.data[i]t.length) //s>t
return 1;
else
return -1; //s
例子:假设采用顺序串存储,设计一个算法求串s中出现的第一个最长的连续相同字符构成的平台;
void LongestString(SqString s,int &index,int &maxlen){
int length,i=1,start;
index=0,maxlen=1;
while(i
这篇只是个人学习过程记录,希望有所帮助!