#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define msize 20
typedef char elemtype;
typedef struct
{elemtype *ch;
int length;
int size;
}chuan;
chuan inilist()
{chuan str;
str.ch=(elemtype*)malloc(msize*sizeof(elemtype));
str.length=0;
str.size=msize;
return str;
}
int pank(chuan l)
{if(l.length==0)
return 1;
else
return 0;
}
int length(chuan l)
{
return l.length;
}
void fuzhi(chuan *str1,char str2[]){
int i=0;
while(str2[i] != '\0') i++;
if(str1->length < i){
str1->ch = (char *)malloc(sizeof(char));
str1->size = i;
}
str1->length = i;
for(i=0;i<str1->length;i++){
str1->ch[i] = str2[i];
}
}
int chuanlj(chuan *l,chuan a,chuan b)
{int i;
if(l->size<(a.size+b.size))
{l->ch=(elemtype*)realloc(l->ch,(a.length+b.length)*sizeof(elemtype));
l->size=a.length+b.length;
}
l->length=a.length+b.length;
for(i=0;i<a.length;i++)
l->ch[i]=a.ch[i];
for(;i<l->length;i++)
l->ch[i]=b.ch[i-a.length];
}
int zhichuan(chuan l,int pos,int len,chuan *t)
{int i;
if(pos<1||pos>l.length||len<0||len>l.length-pos+1)
return 0;
else
{t->ch=(elemtype*)realloc(t->ch,len*sizeof(elemtype));
t->size=len;
t->length=len;
for(i=0;i<t->length;i++)
t->ch[i]=l.ch[pos-1+i];
}
}
int insertlist(chuan *l,int k,chuan d)
{int i;
if(k<=0||k>l->length+1)
return 0;
if(l->size<l->length+d.length)
{l->ch=(elemtype*)realloc(l->ch,(l->length+d.length)*sizeof(elemtype));
l->size=l->length+d.length;}
l->length=l->length+d.length;
for(i=l->length-1;i>=k-1;i--)
l->ch[i+d.length]=l->ch[i];
for(i=0;i<d.length;i++)
l->ch[k+i-1]=d.ch[i];
}
int deletelist(chuan *l,int k,int len)
{int i;
if(k<0||k>l->length||len<0||len>l->length)
return 0;
for(i=len+k-1;i<l->length;i++)
l->ch[i-len]=l->ch[i];
l->length-=len;
}
int ndex(chuan l,chuan s,int pos){
if(pank(s) || pos<0 || pos>s.length-1) exit(0);
int i=pos;
int j=0;
while(i<=l.length && j<=s.length){
if(l.ch[i] == s.ch[j]){
++i;
++j;
}
else{
i=i-j+1;j=0;
}
}printf("%d",j);print(&s);print(&l);
if(j>s.length) {
return i-s.length;
}
else
return 0;
}
int bijiao(chuan l,chuan e)
{
int i=0;
while(l.ch[i]!='\0'&&e.ch[i]!='\0'&&l.ch[i]==e.ch[i])
{i++;
}
if(l.ch[i]>e.ch[i])
return l.ch[i]-e.ch[i];
else if(l.ch[i]=e.ch[i])
return 0;
else
return l.ch[i]-e.ch[i];
}
int print(chuan *str)
{
int i;
for(i=0;i<str->length;i++)
{
printf("%c",str->ch[i]);
}
}
int main()
{
char *s1="abcdef",*s2="sd",*s3="abddd",*s4="de",*s5="sss",*s6="bbb";
chuan l=inilist();
chuan s=inilist();
chuan t=inilist();
chuan v=inilist();
chuan d=inilist();
chuan e=inilist();
chuan a=inilist();
chuan b=inilist();
fuzhi(&l,s1);printf("主串的元素是");print(&l); printf("\n");
fuzhi(&d,s2);printf("d串的元素是"); print(&d); printf("\n");
fuzhi(&e,s3);printf("e串的元素是"); print(&e); printf("\n");
fuzhi(&s,s4);printf("s串的元素是"); print(&s); printf("\n");
fuzhi(&a,s5);printf("a串的元素是"); print(&a); printf("\n");
fuzhi(&b,s6);printf("b串的元素是"); print(&b); printf("\n");
printf("提示:后面的串都指主串");
printf("\n");
printf("串的长度是");
printf("%d",length(l));
insertlist(&l,2,d);
printf("\n");
printf("插入d串后的串是");
print(&l);
printf("\n");
printf("删除后的串是");
deletelist(&l,2,3);
print(&l);
printf("\n");
printf("主串与e串比较后输出的是") ;
printf("%d",bijiao(l,e));
printf("\n");
printf("与s串模式匹配的第一个位置是");
printf("%d",ndex(l,s,0));
printf("\n");printf("子串是");
zhichuan(l,2,3,&t);
print(&t);printf("\n");
printf("a串与b串连接后是");
chuanlj(&l,a,b);
print(&l);
}
串的基本操作(非常全)
最新推荐文章于 2022-10-18 22:49:26 发布