数据结构串基本操作代码.docx
《数据结构串基本操作代码.docx》由会员分享,可在线阅读,更多相关《数据结构串基本操作代码.docx(11页珍藏版)》请在冰豆网上搜索。
数据结构串基本操作代码
实验三串
//串的基本操作
#include"stdio.h"
#include"stdlib.h"
#defineMAXSTRLEN255
typedefunsignedcharSString[MAXSTRLEN+1];
voidstrlength(SStringS)//求字串并放到S[0]中
{
intm;
for(m=1;S[m]!
='\0';m++);
S[0]=m-1;
}
voidinsert(SStringS,intn,chara)//是插入的位置a是插入的字符
{
strlength(S);
inti;
for(i=S[0];i>=n;i--)
S[i+1]=S[i];
S[n]=a;
S[S[0]+2]='\0';
}
intcompare(SStringS,SStringT)
{
strlength(S);
strlength(T);
inti;
for(i=1;i<=S[0]&&i<=T[0];i++)
{
if(S[i]>T[i])
return1;
if(S[i]return-1;
if(S[i]==T[i])
continue;
}
if(S[0]>T[0])
return1;
elseif(S[0]return-1;
else
return0;
}
voidconcat(SStringT1,SStringS1,SStringS2)
{
strlength(S1);
strlength(S2);
inti;
if(S1[0]+S2[0]<=MAXSTRLEN)//未截断
{
for(i=1;i<=S1[0];i++)
T1[i]=S1[i];
for(i=1;i<=S2[0];i++)
T1[S1[0]+i]=S2[i];
}
T1[S1[0]+S2[0]+1]='\0';
}
voidclear(SStringS)
{
strlength(S);
inti;
for(i=1;i
S[i]='\0';
S[0]=0;
}
intSubString(SString&Sub,SStringS,intpos,intlen)
{
inti;
strlength(S);
if(pos<1||pos>S[0]||len<0||len>S[0]-pos+1)
{
printf("Error!
positionorlengthisoutofrange\n");
return0;
}
for(i=1;i<=len;i++)
Sub[i]=S[pos+i-1];
Sub[i]='\0';
Sub[0]=len;
return1;
}
intIndex(SStringS,SStringT,intpos)
{
inti=pos,j=1;
strlength(S);
strlength(T);
while(i<=S[0]&&j<=T[0])
{
if(S[i]==T[j])
{
++i;
++j;
}
else
{
i=i-j+2;
j=1;
}
}
if(j>T[0])
returni-T[0];
elsereturn0;
}
voidmain()//测试主程序
{
/*
SStringS;
printf("请输入字符串S:
");
scanf("%s",S+1);
printf("\n");
printf("输入的字符串为:
");
printf("%s",S+1);
printf("\n");
insert(S,2,'A');
printf("插入字符后的字符串为:
");
printf("%s",S+1);
printf("\n");
*/
/*
SStringT;
printf("请输入字符串T:
");
scanf("%s",T+1);
printf("\n");
intflag;
flag=compare(S,T);
printf("%d",flag);
*/
/*
SStringS1,S2,T1;
printf("请输入字符串S1:
");
scanf("%s",S1+1);
printf("请输入字符串S2:
");
scanf("%s",S2+1);
concat(T1,S1,S2);
printf("连接的新字符串为:
");
printf("%s",T1+1);
printf("\n");
*/
/*
SStringS;
printf("请输入字符串S:
");
scanf("%s",S+1);
printf("你输入的字符串为:
%s\n",S+1);
clear(S);
printf("%s\n",S+1);
*/
/*
SStringS,Sub;
intpos,len;
printf("请输入字符串S:
");
scanf("%s",S+1);
printf("请输入子串的位置:
");
scanf("%d",&pos);
printf("请输入子串的长度:
");
scanf("%d",&len);
if(SubString(Sub,S,pos,len))
{
printf("\n子串为:
%s\n",Sub+1);
printf("子串的长度:
%d\n",Sub[0]);
}
*/
SStringS,T;
intpos,r;
printf("输入主串:
");
scanf("%s",S+1);
printf("输入模式串:
");
scanf("%s",T+1);
printf("请输入起始位置pos:
");
scanf("%d",&pos);
if(r=Index(S,T,pos))
printf("模式串在主串中的位置为:
%d\n",r);
elseprintf("匹配失败!
\n");
}
//字符串中字符频度
#include"Stdio.h"
#include"stdlib.h"
#defineMAXSTRLEN255
typedefunsignedcharSString[MAXSTRLEN+1];
typedefstructcharcp{
charzifu;
intpingdu;
structcharcp*next;
}charcp,*Linkchar;
voidStrlength(SStringS)
{
inti;
for(i=1;S[i]!
='\0';i++);
S[0]=i-1;
}
voidInit(Linkchar&cp)
{
cp=(Linkchar)malloc(sizeof(charcp));
cp->next=NULL;
cp->zifu='\0';
cp->pingdu=0;
}
voidPingdu(SStringS,Linkchar&cp)
{
inti=1;
charcp*p;
charcp*q;
while(S[i]!
='\0')
{
p=cp;
if(p->zifu=='\0')
{
p->zifu=S[i];
p->pingdu++;
i++;
continue;
}
while(p->next!
=NULL)
{
if(p->zifu==S[i])
{
p->pingdu++;
break;
}
p=p->next;
}
if(p->next==NULL)
{
if(p->zifu==S[i])
{
p->pingdu++;
}
else
{
q=(Linkchar)malloc(sizeof(charcp));
q->zifu=S[i];
q->pingdu=1;
q->next=NULL;
p->next=q;
}
}
i++;
}
}
voidmain()
{
Linkcharcp;
Init(cp);
SStringS;
printf("请输入字符串S:
");
scanf("%s",S+1);
Pingdu(S,cp);
charcp*p=cp;
while(p!
=NULL)
{
printf("字符%c的频度为%d\n",p->zifu,p->pingdu);
p=p->next;
}
}