奋斗了几个晚上了,还是通过不了,请大虾帮忙改正!!!奉贤全部身家,跪谢!请尽快答复
//======ADT String的表示与实现=======
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef char Status;
typedef struct{
char *ch;
int length;
}HString;
Status InitString(HString &T){
//创建个串
T.length=0;
T.ch=NULL;
return OK;
}//InitString
Status StrAssign(HString &T,char*chars){
//生成一个其值等于串常量chars的串T
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;
}//else
return OK;
}//String
int StrLength(HString S){
//返回S的元素个数,称为串的长度
int L_length=0,i=0;
while(S.ch[i]){
L_length++;i++;
}//while
return L_length;
}//StrLength
int StrCompare(HString S,HString T){
//若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0
int i;
for(i=0;i<S.length && i<T.length;++i)
if(S.ch[i]!=T.ch[i]) return S.ch[i]-T.ch[i];
return S.length-T.length;
}//Stringcompare
Status ClearString(HString &S){
//将S清为空
if(S.ch) {free(S.ch);S.ch=NULL;}//只清了个头指针,后面的也会释放掉??只是清空,为什么要用
S.length=0; //free释放掉,空间都没了教清空吗?应该只是每个
return OK;
}//Clearstring
Status Concat (HString &T,HString S1,HString S2){
//用T返回由S1与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=S1.length;i<=T.length-1;i++)T.ch[i]=S2.ch[i];
return OK;
}//Concat
Status SubString(HString &Sub,HString S,int pos,int len){
//用Sub返回S的第pos个字符起长度为len的子串
//其中.1<=pos<=StrLength(S)且0<=len<=StrLength(S)-pos+1
int i;
if (pos<1 || pos>S.length || len<0 || len>S.length-pos+1)
return OK;
if(Sub.ch) free(Sub.ch);
if(!len){Sub.ch=NULL; Sub.length=0;}
else{
Sub.ch=(char*)malloc(len*sizeof(char));
for (i=0;i<=len-1;i++,pos++) Sub.ch[i]=S.ch[pos-1];
Sub.length=len;
}return OK;
}//SubString
void main()
{
cout<<"===================请选择你要的操作!==========================\n";
cout<<"\n";
cout<<"========1.退出程序!===========================================\n";
cout<<"========2.生成一个其值等于常量chars的串T======================\n";
cout<<"========3.返回串的元素个数,称为串的长度=======================\n";
cout<<"========4.比较输入的两个串,>,=,<的返回值分别为>0,0,<0=========\n";
cout<<"========5.将串清空,并释放其空间===============================\n";
cout<<"========6.用T返回两个串联接而成的新串=========================\n";
cout<<"========7.如果符合条件,返回串S的第pos个字符起长度为len的子串==\n";
int choice,j,len,i;
char chars,chars1,chars2;
char S[]="chars",S1[]="chars1",S2[]="chars2";
HString T,M,N,Sub;
InitString (T);
InitString (M);
InitString (N);
while(choice!=1){//这里choice没有初始值能判断吗?
cout<<"========请选择你要的操作:";
cin>>choice;
switch(choice){
case 1:
break;
case 2:
cout<<"请输入一个字符串常量!\n";
cin>>chars;
StrAssign (T,S);
cout<<"已生成一个其值等于常量chars的串T!\n";
break;
case 3:
cout<<"请输入一个字符串常量!\n";
cin>>chars;
StrAssign(T,S);
StrLength(T);
cout<<"串长度为:"<<StrLength(T)<<"\n";
break;
case 4:
cout<<"请输入两个字符串常量S1和S2!\n";
cin>>chars1;cin>>chars2;
StrAssign(M,S1);StrAssign (N,S2);
StrCompare(M,N);
cout<<"比较结果为:";
if(StrCompare(M,N)==0)cout<<"S1=S2\n";
else{
if(StrCompare(M,N)>0)cout<<"S1>S2\n";
else cout<<"S1<S2\n";
break;
}//else
case 5:
cout<<"请输入一个字符串常量!\n";
cin>>chars;
StrAssign(T,S);
ClearString(T);
cout<<"字符串已清空!\n";
break;
case 6:
cout<<"请输入两个字符串常量S1,S2!\n";
cin>>chars1;
cin>>chars2;
StrAssign(M,S1);
StrAssign(N,S2);
Concat(T,M,N);
cout<<"两个串联接成的新串为:";
for(i=0;i<=T.length-1;i++)cout<<T.ch[i]<<"\n";
break;
case 7:
cout<<"请输入一个字符串常量!\n";
cin>>chars;
StrAssign(T,S);
cout<<"请输入位置i=\n";
cin>>i;
cout<<"请输入长度len=\n";
cin>>len;
SubString(Sub,T,j,len);
break;
}//switch
}//while
}//main