#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; } 真是想破脑胫了 
|