串的基本功能实现

    技术2022-05-20  44

     

    #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)