#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 40
typedef struct {
char ch[MAXLEN];
int len;
}SString;
void createstring(SString *s)
{
int i,j;
char c;
fflush(stdin);
printf("请输入要建立的串的长度:");
scanf("%d",&j);
for(i=0; i<j; i++)
{
printf("请输入串的第%d个字符:",i+1);
fflush(stdin);
scanf("%c",&c);
s->ch[i] = c;
}
s->len = j;
}
void output(SString *s)
{
int i;
for (i=0;i<s->len;i++)
printf("%c ",s->ch[i]);
printf("\n");
}
int StrInsert(SString *s, int pos, SString t)
{
int i;
if (pos<0 || pos>s->len)
return(0);
if (s->len + t.len<=MAXLEN)
{
for (i=s->len + t.len-1;i>=t.len + pos;i--)
s->ch[i]=s->ch[i-t.len];
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)
{
for (i=MAXLEN-1;i>t.len+pos-1;i--)
s->ch[i]=s->ch[i-t.len];
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[i+pos]=t.ch[i];
s->len=MAXLEN;
}
return(1);
}
}
int StrCompare(SString s, SString t)
{
int i;
for (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)
{
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);
}
void toInsert(SString *str1,SString str2){
int i,j,k,pos;
int flag=0;
printf("请输入要插入的位置:");
scanf("%d",&pos);
flag=StrInsert(str1,pos-1,str2);
if(flag == 0)
printf("插入操作失败!");
else
{
printf("插入后串为:\n");
output(str1);
}
}
void toCompare(SString *str1, SString str2){
int flag=0;
flag=StrCompare(*str1,str2);
printf("字符大小关系为:\n");
if(flag == 0)
printf("字符串相等!");
else
{
if(flag < 0)
printf("字符串1小于字符串2!\n\n");
else
printf("字符串1大于字符串2!\n\n");
}
}
void toIndex(SString *str1){
int pos;
int flag=0;
SString youstring;
printf("请输入要查找的字符串:\n");
createstring(&youstring);
printf("请输入要查找的起始位置:");
scanf("%d",&pos);
flag=StrIndex(*str1,pos,youstring);
if(flag == -1)
printf("查找失败!");
else
{
printf("出现的位置为:%d\n",flag+1);
}
}
int main()
{
SString *str1;
SString str2;
str1 = (SString *)malloc(sizeof(SString));
str1->len = 0;
printf("建立字符串1:\n");
createstring(str1);
printf("建立字符串2:\n");
createstring(&str2);
toInsert(str1,str2);
printf("**************************************************\n");
toCompare(str1,str2);
printf("**************************************************\n");
toIndex(str1);
printf("**************************************************\n");
return 0;
}