#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 40
typedef struct
{
char ch[MAXSIZE];
int len;
}SString;
void init(SString *p)
{
char str[] = "hello world";
strcpy(p->ch,str);
p->len = 12;
}
int StrInsert(SString *s, int pos, SString t)
{
if (pos<0 && pos>MAXSIZE - 1)
{
printf("插入位置非法\n");
}
if (s->len + t.len < MAXSIZE)
{
for (int i = s->len + t.len - 1; i >= pos + t.len; 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 = s->len + t.len;
}
else
if (pos + t.len < MAXSIZE)
{
for (int i = MAXSIZE - 1; i>t.len + pos - 1; i--)
{
s->ch[i] = s->ch[i - t.len];
}
for (int i = 0; i < t.len; i++)
{
s->len = MAXSIZE;
}
}
else
{
for (int i = 0; i < MAXSIZE - pos; i++)
{
s->ch[i + pos] = t.ch[i];
}
s->len = MAXSIZE;
}
return 1;
}
void DeStr(SString *s, int pos,int len)
{
int i;
if (pos < 0 || pos>(s->len - len))
printf("删除位置不合法\n");
for (i = pos + len; i < s->len; i++)
{
s->ch[i - len] = s->ch[i];
}
s->len = s->len - len;
return ;
}
void CopStr(SString *s, SString t)
{
int i;
for (i = 0; i < t.len; i++)
{
s->ch[i] = t.ch[i];
}
s->len = t.len;
}
void EmpStr(SString *s)
{
if (s->len == 0)
printf("为空\n");
else
printf("不为空\n");
}
int CpStr(SString *s, SString t)
{
for (int i = 0; i < s->len&&t.len; i++)
{
if (s->ch[i] != t.ch[i])
{
return (s->ch[i] - t.ch[i]);
}
}
return (s->len - t.len);
}
int StrLen(SString *s)
{
return s->len;
}
int ConStr(SString *s, SString t)
{
int i, flag;
if (s->len + t.len <= MAXSIZE)
{
for (i = s->len; i < s->len + t.len; i++)
{
s->ch[i] = t.ch[i - t.len];
}
s->len += t.len;
flag = 1;
}
else
if (s->len < MAXSIZE)
{
for (int i = s->len; i < MAXSIZE; i++)
{
s->ch[i] = t.ch[i - s->len];
}
s->len = MAXSIZE;
flag = 0;
}
else
flag = 0;
return flag;
}
void subStr(SString *s, int len, int pos, SString t)
{
for (int i = 0; i <=len; i++)
{
t.ch[i] = s->ch[i + pos];
}
t.len = len;
for (int i = 0; i < len; i++)
{
printf("%c", t.ch[i]);
}
}
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++;
j++;
}
else
{
start++;
i = start;
j = 0;
}
}
if (j > t.len) return start;
else return -1;
}
int main()
{
SString temp;
init(&temp);
SString t;
strcpy(t.ch, "happy ");
t.len = 6;
StrInsert(&temp, 6, t);
for (int i = 0; i < strlen((&temp)->ch); i++)
{
printf("%c", (&temp)->ch[i]);
}
getchar();
getchar();
return 0;
}