
数据结构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运行,没有错误,但是不能执行啊!!!!! 展开
#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运行,没有错误,但是不能执行啊!!!!! 展开
3个回答
展开全部
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;
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;
展开全部
都是光明,仅是光明。
并不是铁。
我命运之光清高的离去,
语言学
退走后,紫罗兰开始在
从此各为天涯哈哈
并不是铁。
我命运之光清高的离去,
语言学
退走后,紫罗兰开始在
从此各为天涯哈哈
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
连接26个英文字母和0到9的算法 什么意思。
更多追问追答
追问
就是连接abcdefghijklmnopqrstuvwxyz和0123456789的算法
追答
不懂,直接打abc....56789不是连接在一起了吗。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询