串——数据结构

来源:互联网 发布:qq飞车紫电神驹29数据 编辑:程序博客网 时间:2024/05/22 15:57


数据结构


#include<stdio.h>#include<stdlib.h>#include<string.h>#define maxn 100typedef struct  //串;{    char ch[maxn];    int len;} SString;void StrInsert(SString *s,int pos,SString t)  //在s上的pos位置查入一个t的字符串;{    if(pos<0||pos>s->len) return;    if(s->len+t.len<=maxn)    {        for(int i=s->len+t.len-1; i>=t.len+pos; i--) s->ch[i]=s->ch[i-t.len];        for(int i=0; i<t.len; i++) s->ch[i+pos]=t.ch[i];        s->len+=t.len;    }    else if(pos+t.len<=maxn)    {        for(int i=maxn-1; i>t.len+pos-1; i--) s->ch[i]=s->ch[i-t.len];        for(int i=0; i<t.len; i++) s->ch[i+pos]=t.ch[i];        s->len=maxn;    }    else    {        for(int i=0; i<maxn-pos; i++) s->ch[i+pos]=t.ch[i];        s->len=maxn;    }}void StrDelete(SString *s,int pos,int len)  //从s串上的pos位置删除len个数据;{    if(pos<0||pos>(s->len-len)) return;    for(int i=pos+len; i<s->len; i++) s->ch[i-len]=s->ch[i];    s->len-=len;}int StrCompare(SString s,SString t)  //字符串比较;{    for(int i=0; i<s.len&&i<t.len; i++) if(s.ch[i]!=t.ch[i]) return(s.ch[i]-t.ch[i]);    return(s.len-t.len);}int StrIndex(SString s,int pos,SString t)  //s串的pos位置开始t字符串出现的首位置;{    int i,j,start;    if(t.len==0) return 0;    start=pos;    i=start;    j=0;    while(i<s.len&&j<t.len)    {        if(s.ch[i]==t.ch[j])        {            i++;            j++;        }        else        {            start++;            i=start;            j=0;        }    }    if(j>=t.len) return start;    else return -1;}int main(){    SString s1,s2;    char a='A';    for(int i=0; i<10; i++)    {        s1.ch[i]=a;        a++;    }    s1.len=10;    a='C';    for(int i=0; i<3; i++)    {        s2.ch[i]=a;        a++;    }    s2.len=3;    StrInsert(&s1,3,s2);    for(int i=0; i<s1.len; i++) printf("%c",s1.ch[i]);    printf("\n");    StrDelete(&s1,3,3);    for(int i=0; i<s1.len; i++) printf("%c",s1.ch[i]);    printf("\n");    int x=StrCompare(s1,s2);    printf("%d\n",x);    x=StrIndex(s1,0,s2);    printf("%d\n",x);    return 0;}


原创粉丝点击