数据结构C语言顺序串 求高手修改,特别是concat函数,高手帮忙啊,急!!!!!!!

2024-11-28 16:16:13
推荐回答(1个)
回答1:

//给你改到可以运行了,你要实现什么功能你也没说,就这样了,你自己看看自己的算法,你在用的时候注意下大小写,在C 中是严格区分大小写的,还有就是函数在进行参数传递的时候,传的是什么。怎样传好,如果对修改有不解的地方,我们可以共同解决。
#include
#include
#include
#define MAX 100
#define FALSE 0
#define TRUE 1
#define ERROR 0
typedef struct
{
char ch[MAX];
int len;
}SqString;

void StrAssign(SqString *str )//你这定义的是*str所以下面要用str->
{
int i;char cstr[MAX];
gets(cstr);///先接收串,再对其操作
for(i=0;cstr[i]!='\0';i++)
{
str->ch[i]=cstr[i];
}
str->len=i;
}

int StrCompare(SqString S,SqString T)
{
int i;
for (i = 0; i if (S.ch[i]!=T.ch[i])
return S.ch[i]-T.ch[i];
return (S.len-T.len);
}

int StrLength(SqString S)
{
return S.len;
}

int concat(SqString S,SqString T)
{ int i,overflow;
if (S.len+T.len<=MAX)
{
for(i=0;i<=T.len;i++)
S.ch[S.len+i]=T.ch[i];////引用的是S中的ch中的S.len+i
S.len=S.len+T.len; overflow=FALSE;
}
else {
overflow=TRUE;
if(S.len for(i=0;i S.ch[S.len+i]=T.ch[i];
}
return overflow;
}

void Sqstring(SqString* sub,SqString *s,int pos,int length )///
{ int i;
if(pos<1 || pos>s->len || s->len<0 || length+pos-1 >s->len)
exit(0);
else
{ for(i=0;i<=length;i++)
sub->ch[i]=s->ch[pos+i];
sub->len=length;
}
}

void Print(SqString *S)
{int i;
if(S->len>0)
{for(i=0;ilen;i++)
printf("%c",S->ch[i]);
printf("\n");}
}

void main()
{
int m,n,pos,length;
SqString S,T,sub;
printf("Please input S :");
StrAssign(&S);
Print(&S);
printf("Please input T :");
StrAssign(&T);
Print(&T);
m=StrCompare(S,T);
printf("%d\n",m);
n=StrLength(S);
printf("%d\n",n);
concat (S,T);
Print(&S);
printf("Please input pos= length= \n");
scanf("%d%d",&pos,&length);
Sqstring(&sub,&S,pos,length);
Print(&sub);
getch();
}