帮我看看这个程序吧,好像问题很多呀

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

#include<iostream.h>

#include<conio.h>

#include<stdlib.h>

#include<malloc.h>

#define ERROR 0

#define OK 1

#define OVERFLOW -2

typedef int Status;

typedef struct{

char *ch;

int length;

}StringType;

void InitStr(StringType &s);

// 初始化s为空串。

void StrAssign(StringType &t, char *chars);

// 将s的值赋给t。s的实际参数是串变量。

int StrCompare(StringType s, StringType t);

// 比较s和t。若s>t,返回值>0;若s=t,返回值=0; 若s<t,返回值<0。

int StrLength(StringType s);

// 返回s中的元素个数,即该串的长度。

StringType Concat(StringType &s, StringType t);

// 返回由s和t联接而成的新串。

StringType SubString(StringType s, int start, int len);

// 当1<=start<=StrLength(s)且0<=len<=StrLength(s)- start+1时,

// 返回s中第start个字符起长度为len的子串,否则返回空串。

void Replace(StringType &S, StringType T, StringType V);

/* 以串 v 置换串 s 中出现的所有和串 t 相同的非空串 */

// 注意,不要使用 " s = " 的形式为 StringType 类型的变量赋值 ,

// 而要使用 StrAssign 函数!!!

void InitStr(StringType &s)

{

s.ch = (char *)malloc(sizeof(char));

if(!s.ch)exit(OVERFLOW);

s.length = 0;

}

void StrAssign(StringType &t, StringType s)

{

char *p;

int i;

if(t.ch) free(t.ch);

for(i=0, p=s.ch; *p; ++i,++p);

if(!i){t.ch = NULL;t.length = 0;}

else

{

if(!(t.ch = (char *)malloc(i*sizeof(char))))

exit(OVERFLOW);

for(i=0, p=s.ch; *p ; ++i,++p)

t.ch[i] = s.ch[i];

}

t.length = i;

}

int StrCompare(StringType s, StringType t)

{

int i;

s.length = StrLength(s);

t.length = StrLength(t);

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);

}

int StrLength(StringType s)

{

int i;

char *p;

for(i=0, p=s.ch; *p; ++i,++p);

s.length = i;

return s.length;

}

StringType Concat(StringType &t, StringType s1, StringType s2)

{

char *p,*q;

int i,j;

if(t.ch) free(t.ch);

s1.length = StrLength(s1);

s2.length = StrLength(s2);

if(!(t.ch = (char *)malloc((s1.length + s2.length)*sizeof(char))))

exit(OVERFLOW);

for(i=0, p=s1.ch; *p ; ++i,++p)

t.ch[i] = s1.ch[i];

for( j=0, q=s2.ch; *q;++j,++q)

t.ch[s1.length+j] = s2.ch[j];

t.length = s1.length + s2.length;

return t;

}

StringType SubString(StringType &Sub,StringType s, int start, int len)

// 当1<=start<=StrLength(s)且0<=len<=StrLength(s)- start+1时,

// 返回s中第start个字符起长度为len的子串,否则返回空串。

{

s.length = StrLength(s);int i;

if(start<1 || start>s.length || len<0 || len>s.length-start+1)

exit(ERROR);

if(!len){Sub.ch = NULL;Sub.length = 0;}

else

{

if(Sub.ch) free(Sub.ch);

Sub.ch = (char *)malloc( len* sizeof(char));

if(!Sub.ch)exit(OVERFLOW);

for( i=0;i<len;++i)

Sub.ch[i] = s.ch[start+i-1];

Sub.length = len;

}

return Sub;

}

void Replace(StringType &S, StringType T, StringType V)

/* 以串 v 置换串 s 中出现的所有和串 t 相同的非空串 */

{

StringType t,head,tail,x,y,z;

InitStr(t);

InitStr(head);

InitStr(tail);

InitStr(x);

InitStr(y);

InitStr(z);

int i=1;

//for(int i=1;i<=StrLength(S)-StrLength(T)+2;++i)

while(i<=StrLength(S)-StrLength(T)+1)

{

SubString(t,S,i,StrLength(T));

cout<<t.ch<<endl;

cout<<T.ch<<endl;

if(StrCompare(t,T)!=0)

{ cout<<StrCompare(t,T)<<endl;

++i;}

else

{

cout<<StrCompare(t,T)<<endl;

//cout<<t.ch<<endl;

//cout<<T.ch<<endl;

cout<<"ssssssssssss"<<endl;

SubString(x,S,1,i-1);

StrAssign(head,x);

SubString(y,S,i+StrLength(T),StrLength(S)-i-StrLength(T)+1);

StrAssign(tail,y);

Concat(z,head,V);cout<<z.ch<<endl;

Concat(S,z,tail);cout<<S.ch<<endl;

//StrAssign(S,);

//StrAssign(S,);

i+=StrLength(V);

}

}

}

int main()

{

StringType r,s,t,T,S,s1,s2,V;

InitStr(r);InitStr(t);InitStr(s);InitStr(T);InitStr(S);InitStr(s1);InitStr(s2);InitStr(V);

s.ch="ChinaTown";

S.ch="howareyou";

T.ch="are";

V.ch="wer";//cout<<t.ch<<endl;

s1.ch="goodsdfsf";s2.ch="timesdfdsfsafd";//cout<<StrLength(s)<<endl;

//cout<<s.ch<<endl;

//cout<<c<<endl;

//StrAssign(t,s);

//cout<<t.ch<<endl;

//cout<<StrCompare(s,t)<<endl;

cout<<Concat(r,s1,s2).ch<<endl;

//for(int i=1;i<StrLength(s)-6;++i)

//cout<<SubString(t,s ,i ,8).ch<<endl;

//Replace(S,T,V);

//cout<<S.ch<<endl;

getch();

return 1;

}

真是想破脑胫了

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有