基于C语言实现的顺序串的基本操作(录入、插入、删除、比较、简单模式匹配)

基于C语言实现的顺序串的基本操作

#include <stdio.h>
#define MAXSIZE 40

//结构体 
typedef struct {
	char ch[MAXSIZE];
	int len;
}SString;

//输入s串
void creat1(SString  *s){ 
	int i;
   printf("请输入顺序串s的长度len:");
   scanf("%d",&s->len);
   printf("请输入s串的值:\n");
   for(i=0;i<s->len;i++){
   printf("ch=");
   scanf("%c",&(s->ch[i]));
   s->ch[i]=getchar();
   }
   printf("\n");
}

//输入t串
void creat2(SString  *t){ 
	int i;
   printf("请输入顺序串t的长度len:");
   scanf("%d",&t->len);
   printf("请输入t串的值:\n");
   for(i=0;i<t->len;i++){
   printf("ch=");
   scanf("%c",&(t->ch[i]));
   t->ch[i]=getchar();
   }
   printf("\n");
}

//输出s串
void print1(SString *s){
	int i;
	printf("此时的串是:");
	if (s->len>=0)
 	for(i=0;i<s->len;i++)
	   printf("%c",s->ch[i]);
	printf("\n");
}
 
//输出t串
void print2(SString *t){
	int i;
	printf("此时的t串是:");
	if (t->len>=0)
 	for(i=0;i<t->len;i++)
	   printf("%c",t->ch[i]);
	printf("\n");
}

//插入
StrInsert(SString *s,int pos,SString t){
	int i,j;
	printf("请输入你想要插入的位置:");
	scanf("%d",&pos);
	if(pos<0||pos>s->len)
		return (0);
	if(s->len+t.len<=MAXSIZE){
		for(i=s->len+t.len-1;i>=t.len+pos;i--){
			s->ch[i]=s->ch[i-t.len];
		}
		for(i=0;i<t.len;i++){
			s->ch[i+pos]=t.ch[i];
		}
		s->len=s->len+t.len;
	}
	else if(pos+t.len<=MAXSIZE){
		for(i=MAXSIZE-1;i>t.len+pos-1;i--){
			s->ch[i]=s->ch[i-t.len];
		}
		for(i=0;i<t.len;i++){
			s->ch[i]=s->ch[i-t.len];
		}
		s->len=MAXSIZE;
	}
	else{
		for(i=0;i<MAXSIZE-pos;i++)
		s->ch[i+pos]=t.ch[i];
		s->len=MAXSIZE;; 
	}
	return (1);
} 

//删除
StrDelete(SString *s,int pos,int len){
	int i;
	printf("请输入你想要删除的位置:");
	scanf("%d",&pos);
	printf("请输入你想要删除的长度:");
	scanf("%d",&len);
	if(pos<0||pos>(s->len-len)){
		printf("删除的位置不合理!");
		return (0);
	}
	for(i=pos+len;i<s->len;i++)
	s->ch[i-len]=s->ch[i];
	s->len=s->len-len;
	return (1);
} 

//比较
StrCompare(SString *s,SString t){
	int i,j;
	for(i=0;i<s->len&&i<t.len;i++)
		if(s->ch[i]!=t.ch[i]){
			if(s->ch[i]-t.ch[i]>0)
				printf("s串比t串长!\n");
			if(s->ch[i]-t.ch[i]<0)
				printf("s串比t串短!\n");
				return (s->ch[i]-t.ch[i]);
		}
		else{
				if(s->len-t.len==0)
					printf("s串和t串相等!\n");
				if(s->len-t.len>0)
					printf("s串比t串长!\n");
				if(s->len-t.len<0)
					printf("s串比t串短!\n");
				return(s->len-t.len);
		}
} 

//简单模式匹配
StrIndex(SString s,int pos,SString t){
	int i,j,start,k;
	printf("请输入你想要开始匹配的位置:");
	scanf("%d",&pos);
	if(t.len==0){
		printf("此串为空串,是任意串的匹配穿!");
			return (0);
	}
	start=pos;
	i=start;
	j=0;
	while(i<s.len&&j<t.len)
		if(s.ch[i]==t.ch[j]){
		i++;
		j++;
		}
		else{
		start++;
		i=start;
		j=0;
		}
		if(j>=t.len){
			printf("匹配成功!\n");
			return(start);
		}
		else{
			printf("匹配不成功!\n");
			return(-1);
		}
}

//主函数
void main(){
	int pos,len;
	SString t;
	SString s;
	creat1(&s);
	print1(&s);
	creat2(&t);
	print2(&t);
	StrInsert(&s,pos,t);
	print1(&s);
	print2(&t);
	StrDelete(&s,pos,len);
	print1(&s);
	print2(&t);
	StrCompare(&s,t);
	StrIndex(s,pos,t);
	print1(&s);
	print2(&t);
}

运行结果截图:
在这里插入图片描述

  • 3
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值