#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);
}
基于C的顺序串实现
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 1 问题描述 线性表是由n(n≥0)个数据元素(结点)a[0],a[1],a[2],…,a[n-1]组成的有限序列...
