串的基本功能实现

 

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define bool int

#define true 1

#define false 0

typedef struct{

char *ch;

int length;

}HString;

bool assign(HString *t,char *chs)//生成串

{

int i=0;

char *c=chs,*d=chs;

while(c[i])//c不为空时进入循环

{

i++;//计算字符串常量chs的长度

}

if(!i)

{

t->ch=NULL;

t->length=0;

}

 

else{

t->ch=(char*)malloc(i*sizeof(char));

c=t->ch;

if(!t->ch)//如果没有申请到空间

return -1;

while(*chs)//chs不为空时进入循环

{

*c++=*chs++;

}

t->length=i;

}

return true;

}

 

int strLength(HString *s)//返回串长

{

return s->length;

}

int strCompare(HString *s,HString *t)//串比较

{

int i;

for(i=0;i<s->length&&i<t->length;i++)

{

if(s->ch[i]!=t->ch[i])

return s->ch[i] - t->ch[i];

}

return s->length - t->length;

}

bool concat(HString *t,HString s1,HString s2)

{

int i=0,j=0;

if(!(t->ch=(char*)malloc((s1.length+s2.length)*sizeof(char))))

return false;

for (i;i<s1.length;i++)

{

t->ch[i]=s1.ch[i];

}

t->length=s1.length+s2.length;

for (i=s1.length;i<t->length;i++,j++)

{

t->ch[i]=s2.ch[j];

}

return true;

}

bool subString(HString *sub,HString s,int pos,int len)//用sub返回串的第pos个字符起的子串

{

sub->ch=(char*)malloc(s.length);

if(pos<0||pos>=s.length||len<0||len+pos > s.length)

return false;

if(sub->ch)free(sub->ch);

if(!len)

{

sub->ch=NULL;

sub->length=0;

}

else

{

int i=0;

sub->ch=(char*)malloc(len*sizeof(char));

for(;i<len;i++)

{

sub->ch[i]=s.ch[pos+i];

}

sub->length=len;

}

return true;

}

void printStr(HString *t)//输出串

{

int i=0;

while(i++<t->length)

{

putchar(t->ch[i-1]);

//printf("第%d个:%c/n",i-1,t->ch[i-1]);

}

putchar('/n');

}

 

int main()

{

HString s1,s2;

HString sub,newt;

char a[100],b[100];

int pos,slen;

puts("输入串s1:");

gets(a);

puts("输入串s2:");

gets(b);

assign(&s1,a);

assign(&s2,b);

printStr(&s1);

printStr(&s2);

concat(&newt,s1,s2);

printStr(&newt);

puts("输入子串起始位置:");

scanf("%d",&pos);

puts("输入子串长度:");

scanf("%d",&slen);

subString(&sub,newt,pos,slen);

printStr(&sub);

return 0;

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值