标题:严蔚敏 吴伟明 数据结构 串定长顺序存储 (全是自己上机调试过的)
只看楼主
jaq1318707
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-4-21
 问题点数:0 回复次数:1 
严蔚敏 吴伟明 数据结构 串定长顺序存储 (全是自己上机调试过的)
#include<stdio.h>
#define MAXSTRLEN 20

typedef char sstring[MAXSTRLEN+1];
/*jiang.2010.05.15
也许简单,但都是心血*/
void strassign(sstring t,char *chars){
    int i;
    if(strlen(chars)>MAXSTRLEN) return;
    t[0]=strlen(chars);
    for(i=0;i<=t[0];i++){
        t[i+1]=chars[i];
    }
}
void strcopy(sstring s,sstring t){
    int i;
    for(i=0;i<=t[0];i++)
        s[i]=t[i];
}

int strempty(sstring s){
    if(s[0]==0) return 1;
    else return 0;
}

int strcompare(sstring s,sstring t){
    int i;
    for(i=1;i<=s[0]&&i<=t[0];i++){
        if(s[i]!=t[i]) return s[i]-t[i];
    }
    return s[0]-t[0];
}

int strlength(sstring s){
    return s[0];
}
void clearstring(sstring s){
    s[0]=0;
}

int concat(sstring t,sstring s1,sstring s2){
    int i;
    if(s1[0]+s2[0]<=MAXSTRLEN){
    for(i=1;i<=s1[0];i++)
        t[i]=s1[i];
    for(i=1;i<=s2[0];i++)
        t[s1[0]+i]=s2[i];
        t[0]=s1[0]+s2[0];
    }
    else{
    for(i=1;i<=s1[0];i++)
        t[i]=s1[i];
    for(i=1;i<=MAXSTRLEN-s1[0];i++)
         t[s1[0]+i]=s2[i];
        t[0]=MAXSTRLEN;
    }

}

void substring(sstring sub,sstring s,int pos,int len){
    int i;
    if(pos<1||pos>s[0]||len<0||len>s[0]-pos+1)
        return;
    for(i=1;i<=len;i++)
        sub[i]=s[pos+i];
    sub[0]=len;
}
int index(sstring s,sstring t,int pos){
    int i,j;
    if(pos<0||pos>s[0]) return 0;
    i=pos;
    j=1;
    while(i<=s[0]&&j<=t[0]){
        if(s[i]==t[j]){i++;j++;}
        else{i=i-j+2;j=1;}
    }
    if(j>t[0])
        return i-t[0];
    else
        return 0;
}
   
int strinsert(sstring s,int pos,sstring t){
    int i;
    if(pos<1||pos>s[0]+1)
        return 0;
    if(s[0]+t[0]<=MAXSTRLEN){
        for(i=s[0];i>=pos;i--)
            s[i+t[0]]=s[i];
        for(i=pos;i<=pos+t[0]-1;i++)
            s[i]=t[i-pos+1];
        s[0]+=t[0];
    }
    else{
        for(i=MAXSTRLEN;i>=MAXSTRLEN-t[0];i++)
            s[i]=s[i-t[0]];
            for(i=pos;i<=pos+t[0]-1;i++)
            s[i]=t[i-pos+1];
            s[0]=MAXSTRLEN;
    }
}
int strdelete(sstring s,int pos, int len){
    int i;
    if(pos<1||pos>s[0]-len+1)
        return 0;
   
    for(i=pos+len;i<=s[0];i++)
        s[i-len]=s[i];
    s[0]-=len;
}
void replace(sstring s,sstring t,sstring v){
    int i=1;
    if(strempty(t))
        return;
    do{
        i=index(s,t,i);
        if(i){
            strdelete(s,i,t[0]);
            strinsert(s,i,v);
            i+=v[0];
        }
    }while(i);
}
void strprint(sstring s){
    int i;
    for(i=1;i<=s[0];i++){
        printf("%c",s[i]);
    }
    printf("\n");
}


main(){
    sstring s1,s2,s3,s4,s5,t;
    char c,*a="aa",*b="**",*p="112233",*q="aabbccaa";
    int i;
    strassign(s1,p);
    printf("s1:");
    strprint(s1);
    printf("s1/length:%d/empty(1 :Yes):%d\n",strlength(s1),strempty(s1));
    strcopy(s3,s1);
    printf("copy/s1->s3:");
    strprint(s3);
    strassign(s2,q);
    printf("s2:");
    strprint(s2);
    i=strcompare(s1,s2);
    if(i<0) c='<';
    else if(i==0) c='=';
    else c='>';
    printf("s1%cs2\n",c);
    concat(t,s1,s2);
    printf("concat/s1+s2->t:");
    strprint(t);
    strassign(s4,a);
    printf("s4:");
    strprint(s4);
    i=index(s2,s4,1);printf("index/s2/s4/1:%d\n",i);
    i=index(s2,s4,3);printf("index/s2/s4/3:%d\n",i);
    strinsert(s1,2,s4);
    printf("insert/s1/2/s4:");
    strprint(s1);
    strdelete(s1,2,3);
    printf("delete/s1/2/3:");
    strprint(s1);
    strassign(s5,b);
    printf("s5:");
    strprint(s5);
    replace(t,s4,s5);
    printf("replace/s4/s5:");
    strprint(t);
    clearstring(s1);
    printf("clear/s1:");
    strprint(s1);
    printf("s1/length:%d/empty(1 :Yes):%d\n",strlength(s1),strempty(s1));

}
搜索更多相关主题的帖子: 严蔚敏 数据结构 吴伟明 上机 调试 
2010-05-16 00:02
LegendofMine
该用户已被删除
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-16 11:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-306821-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019726 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved