顺序串的源代码
#include "stdio.h"
#include "stdlib.h"
#define MaxSize 100
typedef struct {
char data[MaxSize];
int length;
}SeqString;
void StrAssign(SeqString &s,char cstr[])
{
int i;
for(i=0;cstr[i]!='\0';i++)
s.data[i]=cstr[i];
s.data[i]='\0';
s.length=i;
}
void StrCopy(SeqString &s,SeqString t)
{
int i;
s.length=t.length;
for(i=0;i<=t.length;i++)
s.data[i]=t.data[i];
}
bool StrEqual(SeqString s,SeqString t)
{
if(s.length!=t.length)
return false;
for(int i =0;i<s.length;i++)
if(s.data[i]!=t.data[i])
return false;
return true;
}
int StrLength(SeqString s)
{
return s.length;
}
SeqString Concat(SeqString s,SeqString t)
{
int i;
SeqString str;
for(i=0;i<s.length;i++)
{
str.data[i]=s.data[i];
}
for(i=0;i<=t.length;i++)
{
str.data[s.length+i]=t.data[i];
}
str.length =s.length+t.length;
return str;
}
SeqString SubStr(SeqString s,int i,int j)
{
int k;
SeqString str;
str.length=0;
if(i<0||i>s.length||j<=0||i+j-1>s.length)
return str;
for(k=0;k<j;k++)
{
str.data[k]=s.data[i+k-1];
}
str.data[k]='\0';
str.length=j;
return str;
}
SeqString InsStr(SeqString s,int i,char cstr[])
{
SeqString str;
int j,k,x=0;
str.length=0;
if(i<0||i>s.length+1)
return str;
for(j=0;j<i-1;j++)
str.data[x++]=s.data[j];
for(k=0;cstr[k]!='\0';k++)
str.data[x++]=cstr[k];
for(;j<s.length;j++)
str.data[x++]=s.data[j];
str.length=x;
return str;
}
SeqString DelStr(SeqString s,int i,int j)
{
SeqString str;
str.length=0;
if(i<=0||i>s.length||i+j>s.length+1)
return str;
for(int k=0;k<i-1;k++)
str.data[k]=s.data[k];
for(int k=i+j-1;k<s.length;k++)
str.data[k-j]=s.data[k];
str.length=s.length-j;
return str;
}
int main()
{
SeqString s,t,str;
//测试一 :StrAssign(&s,cstr);赋值
StrAssign(t,"work for a long time");
printf("StrAssign测试:\n t的值赋值为:%s\n\n",t.data) ;
//测试二:StrCopy(&s,t);复制
StrCopy(s,t);
printf("StrCopy测试:\n s的值和t相同:%s\n\n",s.data);
//测试三:StrEqual(s,t);判断是否相等
printf("StrEqual测试:\n 判断s的值和t的值是否相等\n ") ;
if(StrEqual(s,t)==true)
printf("s和t相等\n\n");
else
printf("s和t不相等\n\n");
//测试四:StrLength(s) 求字符串的长度
printf("StrLength测试:\n 字符串s的串长是%d\n\n",StrLength(s));
//测试五: Concat(s,t) 连接字符串
StrAssign(s,"chinese");
StrAssign(t,"chip");
printf("Concat测试:\n 已知字符串s=chinese,t=chip\n ");
str=Concat(s,t);
printf("t连接在s之后的新字符串为:%s\n\n",str.data);
//测试六:SubStr(s,i,j) 从s中获取从i开始的j个字符的子串
StrAssign(s,"work for a long time");
printf("SubStr测试:\n 己知字符串s=work for a long time\n");
str=SubStr(s,6,3);
printf("获取s字符串中从第6个字符开始的3个字符是:%s\n\n",str.data);
//测试七:InsStr(s1,i,s2)将s2中的字符串插入到s1的i位置。
printf("InsStr测试:\n");
printf("InsStr测试insStr(s,6,hard )后的返回值是:\n");
printf("%s\n\n",InsStr(s,6,"hard ").data) ;
//测试八:DelStr(s,i,j)将s中的字符串从i开始j个字符删除。
StrAssign(s,"word hard!");
printf("DelStr(s,i,j)测试:") ;
printf("DelStr(s,4,4)后的返回值是:\n");
printf("%s\n\n",DelStr(s,4,4).data);
}