李青山(●—●) 2019-11-17 09:29 采纳率: 0%
浏览 190

求大神解答一下这是神魔情况 试了几个版本都这样,程序无法运行·用C写的

源代码:

#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)
  • 写回答

2条回答 默认 最新

  • threenewbee 2019-11-17 09:30
    关注

    要看完整的代码,或者你自己检查下,s和s->data有没有初始化分配内存

    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作