数据结构
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxn 100
typedef 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;
}