數據結構之---C語言實現串的順序存儲
//C語言串的順序存儲表示
//串的堆分配存儲表示
//楊鑫
#include
#include
#include
#define MAXSTRLEN 255
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
//定義數據元素結的構
typedef int Status;
typedef struct
{
char *ch;
int length;
}HString;
//生成一個其值等於串常量chars的串T
Status StrAssign(HString *T,char *chars)
{
int i,j;
if((*T).ch)
free((*T).ch);
i=strlen(chars);
if(!i)
{
(*T).ch=NULL;
(*T).length=0;
}
else
{
(*T).ch=(char*)malloc(i*sizeof(char));
if(!(*T).ch)
exit(OVERFLOW);
for(j=0;jS.length||len<0||len>S.length-pos+1)
return ERROR;
if((*Sub).ch)
free((*Sub).ch);
if(!len)
{
(*Sub).ch=NULL;
(*Sub).length=0;
}
else
{
(*Sub).ch=(char*)malloc(len*sizeof(char));
if(!(*Sub).ch)
exit(OVERFLOW);
for(i=0;i<=len-1;i++)
(*Sub).ch[i]=S.ch[pos-1+i];
(*Sub).length=len;
}
return OK;
}
void InitString(HString *T)
{
(*T).length=0;
(*T).ch=NULL;
}
int Index(HString S,HString T,int pos)
{
int n,m,i;
HString sub;
InitString(&sub);
if(pos>0)
{
n=StrLength(S);
m=StrLength(T);
i=pos;
while(i<=n-m+1)
{
SubString(&sub,S,i,m);
if(StrCompare(sub,T)!=0)
++i;
else
return i;
}
}
return 0;
}
Status StrInsert(HString *S,int pos,HString T)
{
int i;
if(pos<1||pos>(*S).length+1)
return ERROR;
if(T.length)
{
(*S).ch=(char*)realloc((*S).ch,((*S).length+T.length)*sizeof(char));
if(!(*S).ch)
exit(OVERFLOW);
for(i=(*S).length-1;i>=pos-1;--i)
(*S).ch[i+T.length]=(*S).ch[i];
for(i=0;i';
printf("串s%c串t\n",c);
Concat(&r,t,s);
printf("串t聯接串s產生的串r為: ");
StrPrint(r);
StrAssign(&s,"oo");
printf("串s為: ");
StrPrint(s);
StrAssign(&t,"o");
printf("串t為: ");
StrPrint(t);
Replace(&r,t,s);
printf("把串r中和串t相同的子串用串s代替後,串r為:\n");
StrPrint(r);
ClearString(&s);
printf("串s清空後,串長為 : %d 是否為空?%d ( 1 : 空 0 : 否)\n",StrLength(s),StrEmpty(s));
SubString(&s,r,6,4);
printf("串s為從串r的第6個字符起的4個字符,長度為 %d 串s為: ",s.length);
StrPrint(s);
StrCopy(&t,r);
printf("復制串t為串r,串t為: ");
StrPrint(t);
StrInsert(&t,6,s);
printf("在串t的第6個字符前插入串s後,串t為: ");
StrPrint(t);
StrDelete(&t,1,5);
printf("從串t的第1個字符起刪除5個字符後,串t為: ");
StrPrint(t);
printf("%d是從串t的第1個字符起,和串s相同的第1個子串的位置\n",Index(t,s,1));
printf("%d是從串t的第2個字符起,和串s相同的第1個子串的位置\n",Index(t,s,2));
return 0;
}