#include "stdlib.h"
#include "stdio.h"
#define STRINGMAX 81
#define LEN sizeof(struct string)
struct string
{
int len;
char ch[STRINGMAX];
};
typedef struct string STRING;
//--------------------函数声明------------------//
void creat(STRING *s);
void print(STRING *s);
void concat(STRING *s,STRING *t);
STRING *substr(STRING *s,int start,int len);
void delete1(STRING *s,int start,int len);
int index(STRING *s, STRING *t, int pos);
main()
{
STRING *s,*t,*v;
int start,len,id,pos;
int position,flag;
t=(STRING *)malloc(LEN);
s=(STRING *)malloc(LEN);
v=(STRING *)malloc(LEN);
printf("请输入第一个串s:");
creat(s);
printf("\n s->len:%d",s->len);
printf("\n请输入另外一个串t:");
creat(t);
printf("\n t->len:%d",t->len);
printf("\n 请选择你的操作: ");
printf("\n1:连接两个串 2: 求字串 3: 删除子串 4: 查找子串 \n");
scanf("%d",&id);
switch(id)
{
case 1:
{
concat(s,t); //链接两个串
printf("连接后的新串s :\n");
print(s);
}
break;
case 2: //----------------以下取子串-------
{
printf("请输入子串起始位置:");
scanf("%d",&start);
printf("请输入子串长度:");
scanf("%d",&len);
v=substr(s,start,len);
printf("获取的字串是 :\n");
print(v);
}
break;
case 3: //----------------以下是删除子串-----
{
printf("请输入删除的子串起始位置:");
scanf("%d",&start);
printf("请输入删除的长度:");
scanf("%d",&len);
delete1(s,start,len);
printf("删除子串后的串s :\n");
print(s);
}
break;
case 4:
{
printf("请输入比较起始位置:");
scanf("%d",&pos);
if(index(s,t,pos))
{
printf("匹配成功!\n");
printf("匹配的位置为:");
printf("%d\n",index(s,t,pos));
}
else
printf("匹配失败!\n");
}
break;
}
}
//-----------------------------------------------main结束-------------------------
void delete1(STRING *s,int start,int len)//删除子串
{
int i;
if (start<=s->len&&len>=0&&start+len<=s->len)
{
for(i=start+len;i<=s->len;i++)
s->ch[i-len]=s->ch[i];
s->len=s->len-len;
}
else
printf("cannot delete!\n");
}
STRING *substr(STRING *s,int start,int 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);
}
void concat(STRING *s,STRING *t)//链接两个子串
{
int i,j;
if (s->len+t->len>(STRINGMAX))
printf("too long!cannot concat!!");
else
{
j=s->len;
for (i=0;i<t->len;i++)
s->ch[i+j]=t->ch[i];
s->ch[i+j]= '\0';
s->len=s->len+t->len;
}
}
void creat(STRING *s)//创建串
{
char c;
int i;
for (i=0;((c=getchar())!='\n'&&i<81);i++)
s->ch[i]=c;
s->len=i;
s->ch[i+1]= '\0';
}
void print(STRING *s)//打印串
{
if(s==NULL)
printf("error!\n");
else
{
int i;
for (i=0;s->ch[i]!='\0';i++)
printf("%c",s->ch[i]);
printf("\n");
}
}
int index(STRING *s, STRING *t,int pos)//子串比较
{
int i=pos-1,j=0;
if(t==NULL||s==NULL)
printf("error!\n");
else
{
while(i<=s->len&&j<=t->len)
{
if(s->ch[i]==t->ch[j])
{
++i;++j;
}
else
{
i=i-j+1;
j=0;
}
}
if(j>=t->len)
{
return i-t->len;
}
else return 0;
}
}
串的功能实现
最新推荐文章于 2021-04-11 17:11:20 发布