串之顺序串算法

来源:互联网 发布:大数据现在好找工作么 编辑:程序博客网 时间:2024/06/06 20:48
#include<stdio.h>#include<stdlib.h>#include<string.h> #define maxsize 100typedef struct{    char data[maxsize];    int length;}seqString;typedef struct{    char ch;    int count;}chh;//创建串的算法(将一个字符串常量赋给str)void creat(seqString str,char ch[]){    int i;    for(i=0;ch[i]!='\0';i++)    {        str.data[i]=ch[i];    }    str.length=i; } //求串的长度int  getLength(seqString str){    return str.length; } //串的复制 (将t复制给S)void strCopy(seqString s,seqString t){    int i;    for(i=0;i<t.length;i++)    {        s.data[i]=t.data[i];    }    s.length=t.length;}//串连接(不修改s,t)seqString getChat(seqString s,seqString t){    int i;    seqString str;    str.length=s.length+t.length;    for(i=0;i<s.length;i++)    {        str.data[i]=s.data[i];    }    for(i=0;i<t.length;i++)    {        str.data[i+s.length]=t.data[i];    }    return str; } //串连接,考虑空间是否够用seqString *concat(seqString s1,seqString s2){    seqString *r;    int i;    if(s1.length+s2.length>maxsize-1)    {        printf("cannot cancat!");        return  NULL;    }    else    {        r=(seqString*)malloc(sizeof(seqString));        for(i=0;i<s1.length;i++)        {            r->data[i]=s1.data[i];        }        for(i=0;i<s2.length;i++)        {            r->data[s1.length+i]=s2.data[i];        }        r->data[r->length]='\0';        r->length=s1.length+s2.length;    }    return r; } //求子串seqString subString(seqString str,int i,int len){    int k;    seqString *s;    if(i<0||i>str.length||i+len-1>str.length)    {        printf("error!");    }    else    {        s=(seqString*)malloc(sizeof(seqString));        for(k=0;k<len;k++)        {            s->data[k]=str.data[i+k-1];//复制子串到S中         }        s->length=len;        s->data[s->length]='\0';    } }//求子串seqString substring(seqString s,int i,int len){    seqString str;    int k;    str.length=0;    if(i<0||i>s.length||i+len-1>s.length)    {        return str;         }    for(k=0;k<len;k++)    {        str.data[k]=s.data[i+k-1];    }    str.length=len;    return str; }///串插入1seqString insertString(seqString s,int i,seqString t)//在s串第i个位置插入t {    seqString str;    int j;    str.length=0;    if(i<0||i>s.length+1)    {        return str;    }    for(j=0;j<i-1;j++)    {        str.data[j]=s.data[j];//将S元素[0……i-1]存放到str中     }    for(j=0;j<t.length;j++)    {        str.data[i+j-1]=t.data[j];//将t元素存放到str中      }     for(j=i-1;j<s.length;j++)    {        str.data[t.length+j]=s.data[j];//将s元素[i-1,……s.length-1]存放到Str中     }    str.length=s.length+t.length;    return str; }//串插入2seqString insertstring(seqString *s,int i,seqString t){    int k;    if(i<0||i>s->length||s->length+t.length>maxsize-1)    {        printf("cannot insert!");    }    else    {        for(k=s->length-1;k>i-1;k--)        {            s->data[s->length+k]=t.data[k];//s从第i个元素开始后移         }        for(k=0;k<t.length;k++)        {            s->data[i+k-1]=t.data[k];//从第i个位置开始插入t          }         s->length=s->length+k;         s->data[s->length]='\0';     } }//删除子串seqString deleteString(seqString s,int i,int j)//删除从第i个字符开始长度为j的子串 {    seqString str;    int k;    str.length=0;    if(i<0||i>s.length||i+j>s.length+1)    {        return str;//null     }    for(k=0;k<i-1;k++)    {        str.data[k]=s.data[k];//将s.data[0,……i-2]复制到str中      }    for(k=i+j-1;k<s.length;k++)    {        str.data[k-j]=s.data[k];//将s.data[i+j-1,……,s.length-1]复制到str中     }    s.length=s.length-j;    return str; }//打印子串void print(seqString s){    int i=0;    if(s.length>0)    {        for(i=0;i<s.length;i++)        {            printf("%c",s.data[i]);        }        printf("\n");    } }//求每个字符出现的次数int count(seqString s,chh C[]) {    int i,j,n=0;    for(i=0;i<s.length;i++)    {        for(j=0;j<=n;j++)        {            if(C[j].ch==s.data[i])            {                C[j].count++;                break;            }        }        if(j>n)        {            C[n].ch=s.data[i];//若未找到,在C中增加一个元素             C[n].count=1;            n++;        }    }    return n;}//从第i个字符开始的j个字符串用字符串t代替  seqString replace(seqString s,int i,int j,seqString t) {    int k;    seqString str;    str.length=0;    if(i<=0||i>s.length||i+j-1>s.length)    {        return str;     }     for(k=0;k<i-1;k++)     {        str.data[k]=s.data[k];     }     for(k=0;k<t.length;k++)     {        str.data[i+k-1]=t.data[k];     }     for(k=i+j-1;k<s.length;k++)     {        s.data[t.length+k-j]=s.data[k];     }     str.length=s.length-j+t.length;     return str;  } //将字符串中所有字符x替换成yvoid replace1(seqString s,char x, char y){    int i;    for(i=0;i<s.length;i++)    {        if(s.data[i]==x)        {            s.data[i]=y;        }    } }//比较两个串s t 的大小int strcmp1(seqString s,seqString t){    int i,comlen;    if(s.length<t.length)    {        comlen=s.length;//求共同长度     }    else    {        comlen=t.length;    }    for(i=0;i<comlen;i++)//在共同长度内逐个字符比较     {        if(s.data[i]>t.data[i])        {            return 1;        }        else if(s.data[i]<t.data[i])        {            return -1;        }    }    if(s.length==t.length)    {        return 0;    }    else if(s.length>t.length)    {        return 1;    }    else    {        return -1;    } } 
原创粉丝点击