第四章(2).堆分配存储表示

//与定长顺序存储一样,仍以一组地址连续的存储单元存放串值字符序列,但他们的空间都是动态分配的

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

typedef struct
{
 char *ch;
 int length;
}HString;


void InitString(HString *T)    //take care!    T要初始化,T指向的结构体也要初始化
{
 (*T).ch=NULL;
 (*T).length=0;
}

void StrAssign( HString *T, char *cha)
{
 int i,j;
 //char c;
 
 if(!(*T).length)
 {
  free((*T).ch);   //释放T原有空间
 }
 //for(i = 0, c = ch ;c ; ++i,++c) ;   //求ch的长度i.
 
 i = strlen(cha);
 
 if(!i)       //i = 0即长度为0.
 {
  (*T).ch = NULL;
  (*T).length = 0;
 }
 else
 {
  if(!((*T).ch = (char *)malloc((i+1) * sizeof(char))))
  {
   exit(0);
  }
  for(j = 0; j < i; ++j )
  {
   (*T).ch[j] = cha[j];
  }

(*T).ch[ j ] = '\0' ;
  (*T).length = i;
 }
}

void StrPrint(HString T)
{
 int i;
 for(i = 0; i < T.length ; ++i)
 {
  printf("%c",T.ch[i]);
 }
 printf("\n")

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值