#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct
{
int maxlength;
int length;
char *str;
}DString;
void inititate(DString *S,int max,char *string)
{
int i;
S->str=(char *)malloc(sizeof(char)*max);
S->maxlength=max;
S->length=strlen(string);
for(i=0;i<S->length;i++)
S->str[i]=string[i];
}
int insert(DString *S,int pos,DString T)
{
int i;
if(pos<0)
{
printf("pos位置有误!\n");
return 0;
}
else if(S->length+T.length>S->maxlength)
{
realloc(S->str,(S->length+T.length)*sizeof(char));
S->maxlength=S->length+T.length;
}
for(i=S->length-1;i>=pos;i--)
S->str[T.length+i]=S->str[i];
for(i=0;i<=T.length-1;i++)
S->str[pos+i]=T.str[i];
S->length+=T.length;
return 1;
}
int Delete(DString *S,int pos,int len)
{
int i;
if(S->length<=0)
{
printf("数组中未存放字符无元素可删!\n");
return 0;
}
else if(pos<0||len<0||pos+len>S->length)
{
printf("参数pos和len有误!\n");
return 0;
}
else
{
for(i=pos+len;i<=S->length-1;i++)
{
S->str[i-len]=S->str[i];
}
S->length=S->length-len;
return 1;
}
}
int SubString(DString *S,int pos,int len,DString *T)
{
int i;
if(pos<0||len<0||pos+len>S->length)
{
printf("参数pos和len有误!\n");
return 0;
}
if(pos+len>T->maxlength)
{
T->str=(char *)malloc(sizeof(char)*len);
T->maxlength=len;
}
for(i=0;i<len;i++)
T->str[i]=S->str[pos+i];
T->length=len;
return 1;
}
void Destroy(DString *S)
{
free(S->str);
S->maxlength=0;
S->length=0;
}
串的基本操作的实现算法
最新推荐文章于 2024-10-05 22:19:52 发布