#include "stdlib.h"
#include "stdio.h"
#include "iostream.h"
#define STRINGMAX 80
struct string
{int len;
char ch[STRINGMAX]; //和char *ch 作用是一样的
};
typedef struct string STRING;
#define LEN STRINGMAX*sizeof(STRING)/* 串的定义*/
void create(STRING *s);
void print(STRING *s);
int concat(STRING *s,STRING *t);
STRING *substr(STRING *s,int start,int len);
void Delete(STRING *s,int start,int len);
void main()
{STRING *s,*t,*v; /*定义三个采用静态存储形式的串*/ t=(STRING *)malloc(LEN); /*为三个串分配相应的存储空间*/ s=(STRING *)malloc(LEN);
v=(STRING *)malloc(LEN);
int start,len;
// int position;
cout<<"请输入串s:"<<endl; /*创建S串*/
create(s);
cout<<"请输入串t:"<<endl; /*创建T串*/
create(t);
concat(s,t); /* 连接并输出相应的串*/
cout<<"将串t联接串s后,新串s为:"<<endl;
print(s);
cout<<"求子串。
\n输入截取子串的起始位置:";
cin>>start;
cout<<"\n输入子串的长度:";
cin>>len;
v=substr(s,start,len); /*求子串*/
cout<<"\n子串为:"<<v->ch<<endl;
cout<<"输入删除串的起始位置:"; /* 输入删除串的起始位置*/ cin>>start;
cout<<"\n输入删除串的长度:"; /* 输入删除串的长度*/ cin>>len;
Delete(s,start,len); /*删除串*/
cout<<"\n删除子串后,串s为:"<<endl;
print(s);
}
void create(STRING *s)
{
char c;
int i;
for (i=0;((c=getchar())!='\n'&&i<80);i++)
s->ch[i]=c; /*将输入的字符序列放入串的字符数组中*/ s->len=i; /*置串的长度*/
s->ch[i]= '\0 ';
}
void Delete(STRING *s,int start,int len) //从start位置开始删除len长的子串
{
int i;
if (start<=s->len&&len>=0&&start+len<=s->len)/*删除操作合法性验证*/
{for(i=start+len;i<=s->len;i++) /*从start位置开始移动元素*/
s->ch[i-len]=s->ch[i];
s->len=s->len-len; /*置新的长度*/
}
else
cout<<"cannot delete!\n";
}
STRING *substr(STRING *s,int start,int len) //取子串,从start位置开始取len长的子串{int i;
STRING *t;
t=(STRING *)malloc(LEN);
if (start<0&&start>=s->len) /*取子串的合法性验证*/
return(NULL);
else
if (len>=1&&len<=s->len-start)
{ for(i=0;i<len;i++) /*取字符序列入到子串的字符数组中*/
t->ch[i]=s->ch[start+i];
t->len=len; /*置子串长度*/
t->ch[i]='\0';
return(t);
}
else
return(NULL);
}
int concat(STRING *s,STRING *t)
{
if(s->len+t->len>STRINGMAX)
if(!(s=((STRING *)realloc(s,(s->len+t->len)*sizeof(char))))) return 0; int i,j;
j=s->len;
for (i=0;i<t->len;i++)
s->ch[i+j]=t->ch[i]; /*将串t中字符序列放入串s的尾部*/
s->ch[i+j]= '\0 ';
s->len=s->len+t->len; /*置新串s的长度*/
return 1;
}
void print(STRING *s) /*输出串的字符序列*/
{int i;
for (i=0;s->ch[i]!= '\0 ';i++)
cout<<s->ch[i];
cout<<endl;
}。