基于C的顺序串实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXLEN 10
#define False 0
#define True 1
/*定义定长顺序串结构体*/
typedef struct
{
    char ch[MAXLEN];
    int len;
}SString;
/*串插入函数*/
int StrInsert(SString *s,int pos,SString t)
{
    //s:被插串 pos:插入位置 t:插入串
    int i;
    if(pos<0||pos>(s->len))
    {
        printf("插入位置不合法!");
        return False;
    }
    if(s->len+t.len<=MAXLEN)//插入不溢出
    {
        //移动B部分,在S中空处B的位置
        for(i=(s->len+t.len);i>=pos+t.len;i--)
        {
            s->ch[i] = s->ch[i-t.len];
        }
        //安置C
        for(i=0;i<t.len;i++)
            s->ch[i+pos] = t.ch[i];
        s->len = s->len+t.len;
    }
    else if(pos+t.len<=MAXLEN)//插入一部分溢出
    {
        //移动B
        for(i=MAXLEN-1;i>(t.len+pos-1);i--)
            s->ch[i] = s->ch[i-t.len];
        //安置C
        for(i=0;i<t.len;i++)
            s->ch[i+pos] = t.ch[i];
        s->len = MAXLEN;
    }
    else//插入后两部分溢出
    {
        for(i=0;i<MAXLEN-pos;i++)
            s->ch[pos+i] = t.ch[i];
        s->len = MAXLEN;
    }
    return True;
}
/*串删除函数*/
int StrDelete(SString *s,int pos,int len)
/*在串S中删除从下标pos起len个字符*/
{
    int i;
    if(pos<0||pos>(s->len-len))
    {
        printf("删除位置不存在!");
        return False;
    }
    for(i=0;i<len;i++)
        s->ch[pos+i] = s->ch[pos+len+i];
    s->len = s->len-len;
    return True;
}
/*串比较函数*/
int StrCompare(SString s,SString t)
/*若串s和t相等则返回0;若s>t则返回正数;若s<t则返回负数*/
{
    int i;
    if(s.len!=t.len)
    {
        printf("两串长度不等!");
        return False;
    }
    else
    {
        for(i=0;i<s.len;i++)
        {
            if(s.ch[i]!=t.ch[i])
                {
                    printf("两串不相等!");
                    return False;
                }
        }
        printf("两串相等!");
        return True;
    }
}
/*定位函数*/
int StrIndex(SString s,int pos,SString 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+=1;
            j+=1;
        }
        else
        {
            start+=1;
            i = start;
            j = 0;
        }
    }
    if(j>=t.len)
        return start;
    else
        return -1;
}
void ReadSString(SString *s)
{
    int i;
    for(i=0;i<s->len;i++)
    {
        printf("%c",s->ch[i]);
    }
}
int main()
{
    int i;
    SString s;
    s.len = 6;
    strcpy(s.ch,"abcdef");
    SString t;
    t.len = 2;
    strcpy(t.ch,"de");
    i = StrIndex(s,0,t);
    printf("%d",i+1);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容