Common.h
#ifndef COMMON_H_INCLUDED
#define COMMON_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
#endif // COMMON_H_INCLUDED
String_Seq.h
#ifndef STRING_SEQ_H_INCLUDED
#define STRING_SEQ_H_INCLUDED
#include "Common.h"
#define MAXSTRLEN 255
typedef char SString[MAXSTRLEN+1];//0号单元存放串的长度
Status StrAssign_Seq(SString s, char * chars);
Status StrCopy_Seq(SString s, SString t);
Status StrEmpty_Seq(SString s);
int StrCompare_Seq(SString s, SString t);
int StrLength_Seq(SString s);
Status ClearString_Seq(SString s);
Status Concat_Seq(SString t, SString s1, SString s2);
Status SubString_Seq(SString sub, SString s, int pos, int len);
int Index_Seq(SString s, SString t, int pos);
Status Replace_Seq(SString s, SString t, SString v);
Status StrInsert_Seq(SString s, int pos, SString t);
Status StrDelete_Seq(SString s, int pos, int len);
Status DestroyString_Seq(SString s);
void StringPrint_Seq(SString s);
#endif // STRING_SEQ_H_INCLUDED
String_Seq.c
#include "String_Seq.h"
Status StrAssign_Seq(SString s, char * chars)
{
if(strlen(chars) > MAXSTRLEN)
return ERROR;
s[0] = strlen(chars);
int i;
for(i=0; i<s[0]; i++)
{
s[i+1] = chars[i];
}
return OK;
}
Status StrCopy_Seq(SString s, SString t)
{
s[0] = t[0];
int i;
for(i=1; i<=s[0]; i++)
{
s[i] = t[i];
}
return OK;
}
Status StrEmpty_Seq(SString s)
{
if(s[0] == 0)
return TRUE;
else
return FALSE;
}
int StrCompare_Seq(SString s, SString t)
{
int i;
for(i=1;i<=s[0]&&i<=t[0];++i)
if(s[i]!=t[i])
return s[i]-t[i];
return s[0]-t[0];
}
int StrLength_Seq(SString s)
{
return s[0];
}
Status ClearString_Seq(SString s)
{
s[0] = 0;
return OK;
}
Status Concat_Seq(SString t, SString s1, SString s2)
{
if(s1[0] + s2[0] <= MAXSTRLEN)
{
t[0] = s1[0] + s2[0];
int i;
for(i=1; i<=s1[0]; i++)
{
t[i] = s1[i];
}
for(i=1; i<=s2[0]; i++)
{
t[i+s1[0]] = s2[i];
}
}
else
{
t[0] = MAXSTRLEN;
int i;
for(i=1; i<=s1[0]; i++)
{
t[i] = s1[i];
}
for(i=1; i<=MAXSTRLEN-s1[0]; i++)
{
t[i+s1[i]] = s2[i];
}
}
return OK;
}
Status SubString_Seq(SString sub, SString s, int pos, int len)
{
if(pos < 1 || pos > StrLength_Seq(s))
return ERROR;
if(len < 0 || len > StrLength_Seq(s)-pos+1)
return ERROR;
sub[0] = len;
int i;
for(i=1; i<=len; i++)
{
sub[i] = s[pos+i-1];
}
return OK;
}
int Index_Seq(SString s, SString t, int pos)
{
if(pos < 1 || pos>StrLength_Seq(s))
return ERROR;
int i = pos;
int tlen = StrLength_Seq(t);
int slen = StrLength_Seq(s);
SString sub;
while(i < slen-tlen+1)
{
SubString_Seq(sub, s, i, tlen);
if(StrCompare_Seq(sub, t)!= 0)
i++;
else
return i;
}
return 0;
}
Status Replace_Seq(SString s, SString t, SString v)
{
int i=1;
if(StrEmpty_Seq(t))
return ERROR;
do
{
i=Index_Seq(s,t,i);
if(i)
{
StrDelete_Seq(s,i,StrLength_Seq(t));
StrInsert_Seq(s,i,v);
i+=StrLength_Seq(v);
}
}while(i);
return OK;
}
Status StrInsert_Seq(SString s, int pos, SString t)
{
if(pos < 1 || pos > StrLength_Seq(s)+1)
return ERROR;
if(t[0] + s[0] > MAXSTRLEN)
return ERROR;
int i;
for(i=s[0]; i>=pos; i--)
s[i+t[0]] = s[i];
for(i=pos; i<pos+t[0]; i++)
s[i] = t[i-pos+1];
s[0] += t[0];
return OK;
}
Status StrDelete_Seq(SString s, int pos, int len)
{
if(pos < 1 || pos>StrLength_Seq(s)-len+1)
return ERROR;
int i;
for(i=pos; i<=s[0]; i++)
{
s[i] = s[i+len];
}
s[0] -= len;
return OK;
}
Status DestroyString_Seq(SString s)
{
//定长类型,不销毁
s[0] = 0;
return OK;
}
void StringPrint_Seq(SString s)
{
int i;
for(i=1; i<=s[0]; i++)
printf("%c", s[i]);
printf("\n");
}