源代码:
#include
#include
#include
#define MAXSIZE 100
#define ERROR 0
#define OK 1
/*串的顺序存储表示*/
typedef struct
{
char *data;
int length;
int stringsize;
} SqString;
int strInit(SqString s); /初始化串*/
int strCreate(SqString s); /生成一个串*/
int strLength(SqString s); /求串的长度*/
int strCompare(SqString s1,SqString *s2); /两个串的比较*/
int subString(SqString sub,SqString *s,int pos,int len); /求子串*/
int strConcat(SqString t,SqString *s1,SqString *s2); /两个串的连接*/
/*初始化串*/
int strInit(SqString s)
{
s->data=(char *)malloc(MAXSIZE*sizeof(char));
if(!s->data)
return ERROR;
s->length=0;
s->stringsize=128;
return OK;
}/*strInit/
/*生成一个串*/
int strCreate(SqString s)
{
printf("input string :");
scanf("%s", &(s->data));
s->length = strlen(s->data);
return OK;
}/*strCreate/
/*(1)---求串的长度*/
int strLength(SqString *s)
{
return s->length;
}/*strLength*/
/*(2)---两个串的比较,S1>S2返回>0,s1
int strCompare(SqString *s1,SqString *s2)
{
int i;
for(i=0;ilength&&ilength;i++)
if(s1->data[i]!=s2->data[i])
return s1->data[i]-s2->data[i];
return s1->length-s2->length;
}/*strCompare*/
/*(3)---求子串,sub为返回的子串,pos为子串的起始位置,len为子串的长度*/
int subString(SqString sub,SqString *s,int pos,int len)
{
int i;
if(poss->length||lens->length-pos+1)
return ERROR;
sub->length=0;
for(i=0;i,len;i++)
{
sub->data[i]=s->data[i+pos-1];
sub->length++;
}
sub->data[i]='\0';
return OK;
}/*subString/
/*(4)---两个串连接,s2连接在s1后,连接后的结果串放在t中*/
int strConcat(SqString t,SqString *s1,SqString *s2)
{
int i=0,j=0;
if(s1->length+s2->length>=t->stringsize)
{
t->data=(char)realloc(t->data,(t->stringsize+20)*sizeof(char));
if(!t->data)
return ERROR;
t->stringsize=t->stringsize+20;
}
while(ilength)
t->data[i]=s1->data[i++];
while(jlength)
t->data[i++]=s2->data[j++];
t->data[i]='\0';
t->length=s1->length+s2->length;
return OK;
}/*strConcat*/
int main()
{
int select,k,pos,len;
SqString s,t,x;
do
{
printf("************菜单************\n");
printf("1.求串长\n");
printf("2.两个串比较\n");
printf("3.求子串\n");
printf("4.连接两个串\n");
printf("\n*********菜单*************\n");
printf("\n输入你的选择:");
scanf("%d",&select);
getchar();
switch(select)
{
case 1:
printf("\n*****show strlgenth *******\n");
strCreate(&s);
printf("strlength is %d\n",strLength(&s));
break;
case 2:
printf("\n*****show strCompare *******\n");
strCreate(&s);
strCreate(&t);
k=strCompare(&s,&t);
if(k==0)
printf("two string equal");
else if(k
printf("first string
else
printf("first string >second string ");
break;
case 3:
printf("\n*****show substring *******\n");
strCreate(&s);
printf("input substring poos,len:");
scanf("%d,%d", &pos, &len);
if (subString(&t, &s, pos, len))
printf("substring is %s\n", t.data);
else
printf("pos or len ERROR!\n");
break;
case 4:
printf("\n*****show subConcat *******\n");
strCreate(&s);
strCreate(&t);
if (strConcat(&x, &s, &t))
printf("Concat string is %s\n", x.data);
else
printf("Concat ERROR");
break;
default:
break;
}
}
while (select);
return 0;
}
```![图片说明](https://img-ask.csdn.net/upload/201911/17/1573954137_103108.png)