C语言实现串

 #include <stdio.h>
 #include <malloc.h>
 #define MAXSIZE 30
 
 typedef struct
 {
	char data[MAXSIZE];
	int len; 
 }SqString;
 
 void StrAssign(SqString &S,char a[])
 {
 	int i;
	for(i=0; a[i]!='\0'; i++)
	{
		S.data[i] = a[i];
	}
	S.len = i;
 }
 
 void CreateStr(SqString &S,char a[])
 {
 	printf("请输入一串字符:");
	scanf("%s",a);
	StrAssign(S,a);
 }
 
 SqString Concat(SqString &S,SqString R,SqString L)	 //返回一个SqString类型的值 
 {													 //这里应该传入一个&S,因为要改变的是S,而不是这个形参 
 	int i;
 	S.len = R.len + L.len;
 	for(i=0; i<R.len; i++)
 	{
 		S.data[i] = R.data[i];
	}
	for(i=0; i<L.len; i++)
	{
	 	S.data[i+R.len] = L.data[i];
	}
	return S; 
 }
 
 SqString SubStr(SqString &S,int i,int j)
 {
 	int k;
 	SqString str;
 	str.len = 0;
 	if(i<=0 ||i>S.len ||j<0 ||i+j-1>S.len)
 	{
 		printf("超出范围\n");
 		return str;
	 }
	for(k=i-1; k<i+j-1; k++)
	{
		str.data[k-i+1]=S.data[k];
	}
	str.len = j;
	return str;
 }
 
 SqString InsertStr(SqString &S,SqString T,int w)
 {
 	int k;
 	SqString A = S,B;
 	if(w<=0 || w>S.len)
 	{
 		printf("超出插入范围\n");
 		return B;
	}
	
	for(k=0; k<T.len; k++)
	{
		S.data[k+w-1]=T.data[k];
	}
		
	for(k=w-1; k<S.len; k++)
	{
		S.data[T.len+k]=A.data[k];
	}
	S.len = S.len + T.len;
	return S;
 }
 
 SqString DeleteStr(SqString S,int i,int j)
 {
 	SqString str;
 	str.len = 0;
 	int k;
 	if(i<=0 ||i>S.len ||j<0 ||i+j-1>S.len)
 	{
 		printf("超出范围\n");
 		return str;
	 }
	for(k=0; k<i-1; k++)
	{
		str.data[k]=S.data[k];
	}
	for(k=i-1; k<S.len-j; k++)
	{
		str.data[k]=S.data[k+j];
	}
	str.len = S.len-j;
	return str;
  } 
  
 int main()
 {
 	printf("========实现串的ADT========\n\n");
 	
	SqString R,L,S;
	char a[0],b[0];
	
	CreateStr(R,a);
	CreateStr(L,b);
	printf("新创建的串为%s和%s\n",R,L);
	
	printf("串连接得到:%s\n\n",Concat(S,R,L));
	
	int i,j;
	printf("请输入子串的起始位置:");
	scanf("%d",&i);
	printf("请输入子串的长度:");
	scanf("%d",&j);
	printf("子串为:%s\n\n",SubStr(S,i,j));
	
	SqString T;
	char c[0];
	int w;
	printf("请输入要插入串T的位置:"); 
	scanf("%d",&w);
	CreateStr(T,c);
	printf("插入串T后的字符串为:%s\n\n",InsertStr(S,T,w));

	printf("请输入要删除的子串位置:");
	scanf("%d",&i);
	printf("请输入要删除的子串长度:");
	scanf("%d",&j);
	printf("删除后的字符串为:%s\n",DeleteStr(S,i,j));
	
 }

运行结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值