#include <stdio.h>
#define MAXLEN 100
typedef struct {
char ch[MAXLEN];
int len;
} SString;
SString StrConcat(SString s, SString t)
{
SString s1;
int i;
if(s.len + t.len <= MAXLEN)
{ for(i = 0; i < s.len; i++)
s1.ch[i] = s.ch[i];
for(i = 0; i < t.len; i++)
s1.ch[s.len + i] = t.ch[i];
s1.ch[s1.len] = '\0';
s1.len =s.len+t.len;
}
else
s1.len=0;
return(s1);
}
int StrCompare(SString s, SString t)
{
int i;
if(s.len!= t.len)
return (0);
else
{ for(i = 0; i < s.len; i++)
{
if(s.ch[i]!= t.ch[i])
return (0);
}
}
return (1);
}
int SubString(SString sub, SString s, int pos, int len)
{ int i;
if((pos < 0) || (pos >= s.len) || (len < 0) || (len > s.len - pos))
return (0);
else
{
for(i = 0; i < len; i++)
sub-ch[i] = s.ch[i+pos-1];
sub->len = len;
return (1);
}
}
void StrInsert(SString *s, SString t, int pos)
{ int j;
if(s->len + t.len) >= MAXLEN || (pos >s->len+1) || (pos <1))
printf("overflow\n");
else
{
for(j = s->len ; j >= pos; i--)
s->ch[j + t.len-1] = s->ch[j-1];
for(j = 0; j < t.len; j++)
s->ch[j +pos-1] = t.ch[j];
s->len = s->len + t.len;
s->ch[s->len] = '\0'
}
}
void StrDelete(SString *s, int pos, int len)
{
int k;
if((pos < 1) || (pos > s->len) || (len < 0) || (len > s->len - pos))
printf("error\n");
else
{
if( s->len - pos+1<len)
s->len=pos-1;
else
{
for(k=pos+len-1;k<=s->len;k++)
s->ch[k-len]=s->ch[k];
s->len=s->len-len;
}
}
}
String StrReplace(SString *s, SString t, int pos, int len)
{
StrDelete(s, pos, len);
StrInsert(s, t, pos);
}
int StrIndex(SString s, SString t)
{ int i, j;
i = 0;
j = 0;
while((i < =s.len-1) && (j <= t.len-1))
if(s.ch[i] == t.ch[j])
{
i++;
j++;
}
else
{ i = i - j + 1;
j = 0;
}
}
if(j > t.len-1)
return (i - t.len + 1);
else
return (0);
}