数据结构中的串操作详解
-
串操作:串赋值;串复制;串比较;求串长;串联接;求子串;串插入;串删除;子串定位;
p>
子串替
串比较
int StrCompar
e(s,t)/*
串的比较,若
s>t
返回值
>0,
否则反之
*/
sting *s,*t;
{
int i=0;
while((
s->ch[i]=t->ch[i])&&(s->ch[i]!='0')&&(t->ch[i]!='0
'))
i++;
return s->ch[i]-t->ch[i];/*
返回最后位置对应字符的
ASCII
码
值的差
*/
}
求串长
int
StrLength(s)
/*
求串长
*/
string *s;
{
int i=0;
s->len=0;
while(s->ch[i]!='0')
/*
诸葛统计字符,统计结果存入串
s
的
len
域中
*/
s->len++;
return s->len;
/
*
返回统计结果
*
、
< br>
}
串联接
void
StrConcat(l,s,t)
/*
< br>联接串
s
和串
t
于串变量
l
中
*/
string *s,*t,*l;
{
int i,j;
if(s->len+t->len>stringlen)
printf(
结果串
l
的长度超过串的定长
stringlen!n
p>
else
{
for(i=0;s->ch[i]!='0';i++)
l->ch[i]=s->ch[i];
/*
复制
s
串到
l
中
*/
for(j=0;t->ch[j]!='0';j++)
l->ch[i+j]=t->ch[t];
/*
将
t
串连接到
s
串之后存到
l
中
*/
l[i+j]='0';
/*
在
l
串中添加结
束标志
*/
l->len=s->len+t->len;
/*
计算结果串
l
的串长
度
*/
}
}
求子串
void
SubString(t,s,i,len)
/*
将主
串
S
之中第
i
个字符起的长度为
LEN
的子串变量
t
中
*/
STRING *t,*s;
int i,len;
{
int j;
if((i<0)||(i>=s->len))
printf(
字串的开始位置
p>
i
越界错误
n
else
if((len<0)||(len>s->len-i))
printf(
< br>字串的长度
len
越过主串错误
n
else
{
<
br>/* <
br>配过程。
for(j=0;j
t->ch[j]=s->ch[i];
将所求字串存入
t
串中
p>
*/
t->ch[j]='0';
/*
为字
串
t
添加结束标志
*/
t->len=len;
/*
设置字串长度
*/
}
}
字串的定位操作常称作模式匹配
,子串
t
称作模式,在主串
s
中确定
t
的位置的过程称作匹
在文本编辑、
文件检索和各种串处理系统中有着
广泛的应用,
是最重要的串运算之
一。
如利用串比较、求串长和求子串
3
中基
本操作实现模式匹配的算法:
int
StrIndxe(s,t)
<
/p>
/*
利用串的基本运算实现模式匹配,匹配成功返回子串位置,否
则返回
-1*/
RSTING *s,*t;
{
int n,m,i,bool;
n=StrLength(s);
/*
求主串
s
的长度赋值给
n*/
m=StrL
ength(t);/*
求模式串
t
的
长度赋值给
m*/
i=0;bool=-1;
/*<
/p>
初始化,从
s
串中的第一个字符
(
即下标为
0)
开始匹
配并置状态变量
bool
为负数
*/
while((i
/*<
/p>
当长度够且未找到模式串的一个匹配则继续找
*/
{
SubString(l,s,i,m);
if(StrCompare(l,t)==0)
/*
若相等设状态变量值为正数,否
则从下一个位置开始找
*/
bool=1;
else
i++;
}
if(bool>0)
return 1;
/*
若状态变量大于
0
输出子串位置
i
,否则输出
-1*/
else
return -1; -
-