#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;
}
真是想破脑胫了
本文地址:http://com.8s8s.com/it/it22351.htm