数据结构C语言串。用StrAssign和Concat编写一个连接26个英文字母和0到9的算法。 串为堆分配存储表示。

#include<stdio.h>#include<stdlib.h>#defineOVERFLOW-2#defineOK1typedefstruct{char*ch;i... #include<stdio.h>
#include<stdlib.h>

#define OVERFLOW -2
#define OK 1

typedef struct {
char * ch;
int length;
}HString;

typedef char Status;

Status StrAssign(HString &T,char * chars){
int i,j;char * c;
if(T.ch) free(T.ch);
for(i=0,c=chars; c; ++i,++c);
if(!i){
T.ch=NULL;T.length=0;
}
else{
if(!(T.ch=(char *)malloc(i*sizeof(char)))) exit(OVERFLOW);
for(j=0;j<=i-1;j++)
T.ch[j]=chars[j];
T.length=i;
}
return OK;
}

Status Concat(HString &T,HString S1,HString S2){
int i;
if(T.ch) free(T.ch);
if(!(T.ch=(char *)malloc((S1.length+S2.length)*sizeof(char)))) exit(OVERFLOW);
for(i=0;i<=S1.length-1;i++)
T.ch[i]=S1.ch[i];
T.length=S1.length+S2.length;
for(i=0;i<=S2.length-1;i++)
T.ch[i+S1.length]=S2.ch[i];
return OK;
}

void main(){
HString T,S1,S2;int i;
char *a="abcdefghijklmnopqrstuvwxyz",*b="0123456789";
StrAssign(S1,a);
StrAssign(S2,b);
Concat(T,S1,S2);
for(i=0;i<=T.length;i++)
printf("%c",T.ch[i]);
}

这是我编的,用VC运行,没有错误,但是不能执行啊!!!!!
展开
 我来答
njflysky
2012-10-28 · TA获得超过110个赞
知道小有建树答主
回答量:129
采纳率:0%
帮助的人:116万
展开全部
1. 程序中for(i=0,c=chars; c; ++i,++c);语句是个for循环但其循环体是空语句,目的是让指针c指到chars的最后一个字符的后面。现实环境运行中这里是死循环!!!改为
for(i=0,c=chars; *c; ++i,++c);
2.if(T.ch) free(T.ch);这条语句在运行中会发生内存读写错误!!!改正方法:
在main函数中:
HString T,S1,S2;
T.ch = 0; T.length = 0;//增加初始化
S1.ch = 0; S1.length = 0;//增加初始化
S2.ch = 0; S2.length = 0;//增加初始化
int i;
steepmustn
2014-08-21 · TA获得超过958个赞
知道答主
回答量:79
采纳率:0%
帮助的人:78.6万
展开全部
都是光明,仅是光明。
并不是铁。
我命运之光清高的离去,
语言学
退走后,紫罗兰开始在
从此各为天涯哈哈
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
记住一座城
2012-10-20 · TA获得超过728个赞
知道小有建树答主
回答量:1091
采纳率:33%
帮助的人:682万
展开全部
连接26个英文字母和0到9的算法 什么意思。
更多追问追答
追问
就是连接abcdefghijklmnopqrstuvwxyz和0123456789的算法
追答
不懂,直接打abc....56789不是连接在一起了吗。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式