//SequenceString.cpp
#include"predefined.h"
#include"SequenceString.h"
Status StrAssign(SString T,char *chars)
//生成一个其值等于chars的串T
{
int i,len;
len=strlen(chars);
if(len>MAXSTRLEN)
return ERROR;
T[0]=len;
for(i=1;i<=len;i++)
{
T[i]=chars[i-1];
}
return OK;
}
void StrCopy(SString T,SString S)
//由串S复制的串T
{
int i;
for(i=0;i<=S[0];i++)
{
T[i]=S[i];
}
}
Status StrEmpty(SString S)
//若串S为空串,返回TRUE;否则返回FALSE
{
if(S[0])
return FALSE;
else
return TRUE;
}
Status StrCompare(SString S,SString T)
//若S>T,则返回值>0;若S=T,则返回值=0;若SS[0]||len<0||len>S[0]-pos+1)
return ERROR;
Sub[0]=len;
int i;
for(i=1;i<=len;i++)
{
Sub[i]=S[pos++];
}
return OK;
}
Status Index(SString S,SString T,int pos)
//算法4.1:T为非空串。若主串S中第pos个字符之后存在与T相等的子串,
//则返回第一个这样的子串在S中的位置,否则返回0
{
int m,n,i;
SString Sub;
n=StrLength(S);
m=StrLength(T);
i=pos;
if(pos>0)
{
while(i<=n-m+1)
{
SubString(Sub,S,i,m);
if(StrCompare(Sub,T))
i++;
else
return i;
}
}
return ERROR;
}
Status Replace(SString S,SString T,SString V)
//用V替换主串S中出现的所有与T相等的不重叠的子串
{
int n;
n=Index(S,T,1);
while(S[0]-T[0]+V[0]S[0]+1||S[0]+T[0]>MAXSTRLEN)
return ERROR;
for(i=1;i<=S[0]-pos+1;i++)
S[S[0]+T[0]-i+1]=S[S[0]-i+1];
for(i=pos,j=1;j<=T[0];i++,j++)
S[i]=T[j];
S[0]=S[0]+T[0];
return OK;
}
Status StrDelete(SString S,int pos,int len)
//从串S中删除第pos个字符起长度为len的子串
{
int i;
if(pos<1||pos+len-1>S[0]||len<0)
return ERROR;
for(i=0;i
#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN+1];
void StrAssign(SString *T,char *chars);
Status StrAssign(SString T,char *chars);
void StrCopy(SString T,SString S);
Status StrEmpty(SString S);
Status StrCompare(SString S,SString T);
Status StrLength(SString S);
void ClearString(SString S);
Status Concat(SString T,SString S1,SString S2);
Status SubString(SString Sub,SString S,int pos,int len);
Status Index(SString S,SString T,int pos);
Status Replace(SString S,SString T,SString V);
Status StrInsert(SString S,int pos,SString T);
Status StrDelete(SString S,int pos,int len);
void StrPrint(SString S);
#include"predefined.h"
#include"SequenceString.h"
int main()
{
char *chars="abcdefg";
char *t="***";
char *v="^^^^";
SString S,Tmp,T,V,Sub;
int i;
printf("Function 1\n★函数Status StrAssign(SString T,char *chars)测试...\n");
printf("▲为顺序串Tmp赋值...\n\n");
StrAssign(Tmp,chars);
printf("Function 2\n★函数Status StrEmpty(SString S)测试...\n");
StrEmpty(Tmp)?printf("▲Tmp空串!!!\n\n"):printf("▲Tmp非空!!!\n\n");
printf("Function 3\n★函数Status StrLength(SString S)测试...\n");
i=StrLength(Tmp);
printf("▲Tmp长度为%d\n\n",i);
printf("Function 4\n★函数void StrPrint(SString S)测试...\n");
printf("▲串Tmp=\"");
StrPrint(Tmp);
printf("\"\n\n");
printf("Function 5\n★函数void StrCopy(SString T,SString S)测试...\n");
StrCopy(S,Tmp);
printf("▲串S=\"");
StrPrint(S);
printf("\"\n\n");
printf("Function 6\n★函数Status StrCompare(SString S,SString T)测试...\n");
i=StrCompare(Tmp,S);
i==0?printf("Tmp=S\n\n"):(i<0?printf("TmpS\n\n"));
printf("Function 7\n★函数Status StrInsert(SString S,int pos,SString T)测试...\n");
printf("▲将\"***\"赋给T...\n");
StrAssign(T,t);
printf("▲在S的第5个字符前插入T...\n");
StrInsert(S,5,T);
printf("▲串S=\"");
StrPrint(S);
printf("\"\n\n");
printf("Function 8\n★函数Status Index(SString S,SString T,int pos)测试...\n");
printf("▲获取\"***\"在S中从第1个字符算起的第一次出现的位置...\n");
i=Index(S,T,1);
printf("▲\"***\"在S中从第1个字符算起的第一次出现的位置为:%d\n\n",i);
printf("Function 9\n★函数Status SubString(SString Sub,SString S,int pos,int len)测试...\n");
printf("▲用Sub返回S中第5个字符起的3个字符...\n");
SubString(Sub,S,5,3);
printf("▲串Sub=\"");
StrPrint(Sub);
printf("\"\n\n");
printf("Function 10\n★函数Status Replace(SString S,SString T,SString V)测试...\n");
printf("▲将\"^^^^\"赋给V...\n");
StrAssign(V,v);
printf("▲用\"^^^^\"替换S中的\"***\"...\n");
Replace(S,T,V);
printf("▲串S=\"");
StrPrint(S);
printf("\"\n\n");
printf("Function 11\n★函数Status StrDelete(SString S,int pos,int len)测试...\n");
printf("▲删除S中第5个字符起的4个字符...\n");
StrDelete(S,5,4);
printf("▲串S=\"");
StrPrint(S);
printf("\"\n\n");
printf("Function 12\n★函数void ClearString(SString S)测试...\n");
printf("▲清空S前:");
StrEmpty(S)?printf("▲S空串!!!\n"):printf("▲S非空!!!\n");
ClearString(S);
printf("▲清空S后:");
StrEmpty(S)?printf("▲S空串!!!\n\n"):printf("▲S非空!!!\n\n");
printf("Function 13\n★函数Status Concat(SString T,SString S1,SString S2)测试...\n");
printf("▲链接T和V形成Tmp...\n");
Concat(Tmp,T,V);
printf("▲串Tmp=\"");
StrPrint(Tmp);
printf("\"\n\n");
}