串的堆分配|定义与方法


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

串的堆分配存储表示

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<<"释放空间"<<endl; 
    int l;
    char* c;
    for(l=0,c=chars;*c;++l,++c);    //求chars的长度l
    //cout<<"获得串长:"<<l<<endl; 
    if(l==0){
        T->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<<StrLength(HStr)<<endl;
    cout<<PrintStr(HStr);
    
    return 0; 
}

求字串位置 -基础

//求子串位置
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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容