串的堆分配存储的连接

串的堆分配存储的连接代码如下:

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

#define MAXSIZE 20
#define FALSE 0
#define TRUE 1
#define OK 1
#define ERROR 0

typedef int Status;

typedef struct{
    char *ch;
    int length;
}HString;
Status StrAssign(HString *S,char *chars)
{
    if(S->ch)S->ch=NULL;
    int i,j;
    i=strlen(chars);//计算长度
    if(!i)
    {
        S->ch=NULL;
        S->length=0;
    }
    else
    {
        if(!(S->ch=(char *)malloc(i*sizeof(char))))
        {
            exit(0);
        }
        else{
            for(j=0;j<i;j++){
                S->ch[j]=chars[j];
            }
            S->length=i;
        }
    }   
    return OK;
}
Status Concat(HString *S,HString S1,HString S2)
{
    int i,j;
    if(S->ch)S->ch=NULL;
    if(!(S->ch=(char *)malloc((S1.length+S2.length)*sizeof(char))))exit(0);
    for(i=0;i<S1.length;i++){
        S->ch[i]=S1.ch[i];
    }
    S->length=S1.length+S2.length;
    for(j=S1.length,i=0;j<S->length;j++)
    {
        S->ch[j]=S2.ch[i];
        i++;
    }
    return OK;
}
void print(HString S)
{
    int i;
    for(i=0;i<S.length;i++)
    {
        printf("%c",S.ch[i]);
    }

}
Status main()
{
    HString S,S1,S2;
    char ch1[]="william";
    char ch2[]="bao";
    StrAssign(&S1,ch1);
    StrAssign(&S2,ch2);
    Concat(&S,S1,S2);
    print(S);
    return 0;
}

运行结果如下:
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值