⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hstring.c

📁 这是我的一些数据结构(C语言)源代码 比如LinkList
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
typedef enum {ERROR = -2,OVERLOW,FLASE, TRUE, OK} Status;
typedef struct{
        char* ch;
        int length;
}HString;

Status StrAssign(HString* T, const char* chars){
    //生成一个其值等于串chars的串T 
        int i,j;
        
        if(T->ch) free(T->ch);    //释放T原有的空间 
        
        i = strlen(chars);         
        if(!i) {T->ch = NULL; T->length = 0;}
        else{
                T->ch=(char*)malloc(i* sizeof(char));
                if(!(T->ch))
                        exit(OVERLOW);
                for(j = 0; j<i; j++)
                        T->ch[j] = chars[j];
                T->length = i;
        }
        return OK;
}

int StrLength(const HString *S){
    //返回S的元素个数 ,称为串的长度 
        return S->length;
}

int StrCompare(const HString *S, const HString *T){
    //若S>T,则返回值>0:若S=T,则返回值=0 :若S<T,则返回什<0 
        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;
}

Status ClearString(HString *S){
    //将S清为空串 
        if(S->ch) {free(S->ch); S->ch = NULL;}
        S->length = 0;
        return OK;
}

Status Concat(HString *T, const HString *S1, const HString *S2){
    //用T返回由S1和S2联接而成的新串 
        int i;
        if(T->ch) free(T->ch);
        T->ch=(char*)malloc((S1->length + S2->length)*sizeof(char));
        if(!(T->ch))
                exit(OVERLOW);
        for(i= 0; i < S1->length; i++)
                T->ch[i] = S1->ch[i];
        T->length = S1->length + S2->length;
        for(i = S1->length; i < T->length ; i++)
                T->ch[i] = S2->ch[i - S1->length];
        return OK;
}

Status SubString(HString *Sub, const HString *S, int pos, int len){
    //用Sub返回串S的第pos个字符起长度为len的子串
    //其中,1 <= pos <= Stringth(s)且O <= len <= StringLength(S)-pos+1 
        int i;
        if(pos < 1 || pos > S->length || len < 0 || len > S->length - pos + 1)
                return ERROR;
        if(Sub->ch) free(Sub->ch);
        if(!len) { Sub->ch = NULL; Sub->length = 0;}
        else{
                Sub->ch = (char*) malloc(len*sizeof(char));
                for(i=0; i<len; i++)
                        Sub->ch[i] = S->ch[pos-1+i];
                Sub->length = len;
        }
        return OK;
}

void output(const HString *S){
        int i;

        for(i= 0; i< S->length; i++)
                printf("%c", S->ch[i]);
        printf("\n");
}

int main()
{
        HString S1, S2, S3, S4;
        int compare;

        StrAssign(&S1, "Hello, World.");
        output(&S1);
        printf("The length of S1: %d\n", StrLength(&S1) );
        
        StrAssign(&S2, "Hello, BugYou.");
        output(&S2);
        printf("The length of S2: %d\n", StrLength(&S2) );
        
        printf("\nCompare S1 to S2:\n");
        compare = StrCompare(&S1, &S2);
        if(compare > 0) printf("S1 > S2.\n");
        else if(compare == 0) printf("S1 = S2.\n");
        else printf("S1 < S2\n");
        
        printf("\nConcat String S1 and S2:\n");
        Concat(&S3, &S1, &S2);
        output(&S3);
        printf("The length of S3: %d\n", StrLength(&S3) );
        //printf("%d\n", strlen(S3.ch));   
        
        printf("\nSubset of String S1:\n"); //子集
        SubString(&S4, &S1, 1, 5);
        output(&S4);

        printf("\nClear String S3:\n");
        ClearString(&S3);
        printf("Length: %d\n", S3.length);

        free(S1.ch);
        free(S2.ch);
        if(S3.ch) { free(S3.ch);printf("Free S3.\n"); }
        free(S4.ch);
        system("pause");
        return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -