串的堆分配表示

#include <stdio.h>
#include<stdlib.h>

#define Error 0
#define Ok    1
typedef  int Status;
typedef  struct {
	char *ch;
	int length;
}HString;       //堆分配的结构体定义
Status StrAssign(HString &T,char *chars){        //生成一个值等于数组chars的t串
	int i,j;
	i=sizeof(chars)/sizeof(char);      // 取得数组chars的长度
	T.ch=(char*)malloc(i*sizeof(char));
	for(j=0;j<i;j++)
		T.ch[j]=chars[j];
	T.length=i;
	return Ok;
}
int Length(HString s)         
{
	return s.length;
}
Status ClearString(HString &s)        //清除串
{
	if(s.ch)  {free(s.ch) ; s.ch=NULL;}
	s.length=0;
	return Ok;
}
Status Concat(HString &T,HString s1,HString s2){             //将两个串合并为一个串
	int i,j;
	if(T.ch) {free(T.ch);T.ch=NULL;}
	T.ch=(char*)malloc((s1.length+s2.length)*sizeof(char));
	for(i=0;i<s1.length;i++)
		T.ch[i]=s1.ch[i];
	for(j=0;j<s2.length;j++)
		T.ch[i+j]=s2.ch[j];
	T.length=s1.length+s2.length;
	return Ok;
}
Status SubString(HString &T,HString s,int pos,int len)  //截取子串
{
	int i,j;
	if((pos>s.length||pos<1)&&(len<0&&len>s.length-pos+1))    //如果要求的位置pos和长度len不合法,那么退出
		return Error;
	if(!len) {T.ch=NULL;T.length=0;}
	else
	{
		T.ch=(char*)malloc(len*sizeof(char));
		for(i=pos,j=0;j<len;i++,j++)
			T.ch[j]=s.ch[i];
		T.length=len;
	}
	return Ok;
}
void print(HString T)
{
	int i;
	for(i=0;i<T.length;i++)
		printf("%c",T.ch[i]);
	printf("\n");
}
void main()
{
	HString S,T1,T2,T3,T4;
	int pos,len;
	char chars[]={'a','b','c','d'};
	char charss[]={'e','r','t','y'};
	printf("取得第一个和第二个的串为:");
	StrAssign(T1,chars);
	StrAssign(T2,charss);
	print(T1);
	print(T2);
	printf("请输入取第一个串的子串的初始位置和子串的长度");
	scanf("%d,%d",&pos,&len);
	SubString(S,T1,pos,len);
	printf("串一的子串为:");
	print(S);
	getchar();
	getchar();
}

堆分配个人感觉就是按照顺序表的形式来存储和操作串的



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值