串的堆分配|定义与方法


由于堆分配满足顺序存储结构的特点,存储方便,操作中对串长没有任何限制,故常被采用。

串的堆分配存储表示

typedef struct HString{
    char *ch;
    int length;
    
    //结构体构造函数 
    HString(){
        ch = new char;
        length = 0;
    }
}HString;

初始串赋值

Status StrAssign(HString* T,char *chars){
    //生成一个值等于串常量chars的串T 
    /*
    if(T->ch)
        free(T->ch);//释放T原有空间
        */
    //cout<<"释放空间"<ch=NULL;
        T->length=0; 
        
    } 
    else{
        for(int i=0;i<=l;i++){
            T->ch[i]=chars[i];
        }   
        T->length = l;
    }
    return OK;
}

获得串长及串值

int StrLength(HString* T){
    return T->length;
} 

char* PrintStr(HString* T){
    return T->ch;
} 

基础功能操作

#include "comdef.h"
#include "hstring_def.h"

using namespace std;

int main() {
    char* str = "This is a HString";

    HString* HStr = new HString();
    StrAssign(HStr,str);
    cout<

求字串位置 -基础

//求子串位置
int Index(HString* S,HString *T,int pos) {
    //返回子串T在主串S第pos个字符之后的位置
    //T非空,1<=pos<=Strlength(S)
    int i= pos;
    int j=1;
    int Slen = StrLength(S);
    int Tlen = StrLength(T);
    while(i<=Slen&&j<=Tlen) {
        if(S->ch[i]==T->ch[j]) {
            i++;
            j++;    //继而比较后续字符
        } else {
            i = i-j+2;
            j=1;
        }
        
        if(j>Tlen)  return i-Tlen;
        else return 0;
    }
}

你可能感兴趣的:(串的堆分配|定义与方法)