简介:
1.字符串是由零个或多个字符组成
2.子串:串中任意个连续的字符组成的子序列称为该串的子串
3.主串:包含子串的串称为主串。可见,字串是主串的一部分。
4.串相等:当两个串的长度相等且每个对应位置的字符都相等时。
5.子串在主串的位置:以第一个字符在主串中的位置表示。
如:A=“hello world”,B=“hello” C=“world”
B和C分别是A的子串,B的位置为1,C的位置为7
定长顺序串:
类型定义:
#define max 50
typedef struct{
char ch[max];
int len
}sst;//串结构定义
串插入:
简单说明:
插入的位置将串分为两部分,假设分为了AB;两部分,插入c后变成了AcB
1.插入后串长(LA+Lc+LB)<=max,则将B向后移动Lc个元素位置,在将c插入;
2.插入后串长>max且pos+Lc<=max,将B往后移动后会有部分字符被舍弃;
3.插入后串长>max且pos+Lc>max,则B全部被舍弃,直接从pos开始插入。
SteInsert(sst *s,int pos,sst t){
/*在串s中下表为pos的字符之前插入串t*/
if(pos<0||pos>s->len) return 0;
if(s->len+t.len<=max)
{
for(i=s->len+t.len;i>=pos+t.len;i--)
{
s->ch[i]=s->ch[i-t.len];
}
for(i=0;i<t.len;i++) s->ch[i+pos]=t.ch[i];
s->len=s->len+t.len;
}
else if(pos+t.len<=max)
{
for(i=max-1;i>=pos+t.len;i--)s->ch[i]=s-ch[i-t.len];
for(i=0;i<t.len;i++) s->ch[i+pos]=t.ch[i];
s->len=max;
}
else{
for(i=0;i<t.len;i++)s->[i+pos]=t.ch[i];
s->len;
}
return 1;
}
顺序串删除:
StrDelte(sst *W,int pos,int len)
{
if(pos<0||pos>s->len-len)return 0;
for(int i=pos+len;i<s->len;i++)
s->ch[i-len]=s->ch[i];//从pos+len开始至串尾依次向前移动,实现删除len个字符。
s->len=s->len-len;//s串长减len
}