主函数自行添加
头文件 + 宏定义
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
串的顺序存储
typedef struct
{
char str[MAXSIZE];
int length;
}seqstring;
顺序串的创建
void creat(seqstring *S)
{
char c;
int i=0;
while((c=getchar())!='\n')
{
S->str[i++]=c;
}
S->str[i]='\0';
S->length=i;
return ;
}
(1)插入运算
将字符串T插入到字符串S的第i个字符开始的位置上
void strinsert(seqstring *S,int i,seqstring T)
{
int k;
if(i<1 || i>S->length+1 || S->length + T.length>=MAXSIZE)
{
printf("can not insert\n");
return ;
}
for(k=S->length-1;k>=i-1;k--)
{
S->str[k+T.length]=S->str[k];
}
for(k=0;k<T.length;k++)
{
S->str[k+i-1]=T.str[k];
}
S->length+=T.length;
S->str[S->length]='\0';
}
(2)删除运算
将串S中从第i个字符起长度为len的字串删除
void strdelete(seqstring *S,int i,int len)
{
int k;
if(i<0 || i>S->length || i+len-1>MAXSIZE)
{
printf("can not delete\n");
return ;
}
for(k=i-1;k<=S->length-1;k++)
{
S->str[k]=S->str[k+len];
}
S->length-=len;
S->str[k]='\0';
return ;
}
(3)顺序串的连接
将串S1和串S2连接
seqstring *strconcat(seqstring S,seqstring T)
{
int i;
seqstring *r;
if(S.length+T.length>=MAXSIZE)
{
printf("can not concate\n");
return NULL;
}
r=(seqstring*)malloc(sizeof(seqstring));
for(i=0;i<S.length;i++)
{
r->str[i]=S.str[i];
}
for(i=0;i<T.length;i++)
{
r->str[S.length+i]=T.str[i];
}
r->length=S.length+T.length;
r->str[r->length]='\0';
return r;
}
(4)求子串运算
从串第i个字符开始取长度为len的子串返回
seqstring *substring(seqstring S,int i,int len)
{
int k;
seqstring *r;
if(i<1 || i>S.length || i+len-1>S.length)
{
printf("substring error\n");
exit(1);
}
else
{
r=(seqstring*)malloc(sizeof(seqstring));
for(k=0;k<len;k++)
{
r->str[k]=S.str[i-1+k];
}
r->length=len;
r->str[r->length]='\0';
}
return r;
}