5,530
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
char *ch;
int length;
}HString;
int initstring(HString *T)
{
(*T).ch=NULL;
(*T).length=0;
}
int StrAssign(HString &T,char *chars)
{
int len,i;
char *c;
if(T.ch)
free(T.ch);
len=strlen(chars);
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(0);
for(i=0;i<len;i++)
T.ch[i]=chars[i];
T.length=i;
}
return 1;
}
int strinsert(HString &S,int pos, HString T)
{
int i,j;
if(pos<1||pos>S.length)
return 0;
if(T.length)
{
if(!(S.ch=(char *)realloc(S.ch,(S.length+T.length)*sizeof(char))))
exit(0);
for(i=S.length-1;i>pos-1;--i)
S.ch[i+T.length]=S.ch[i];
for(i=pos,j=0;i<=pos+T.length-1;i++,j++)
S.ch[i]=T.ch[j];
S.length+=T.length;
}
return 1;
}
int SubString(HString &Sub, HString S, int pos, int len)
{
int i,j;
if(pos<1||pos>S.length||len<0||len>S.length-pos+1)
return 0;
if(Sub.ch)
free(Sub.ch);
if(!len)
{
Sub.ch=NULL;
Sub.length=0;
}
else
{
Sub.ch=(char *)malloc(len *sizeof(char));
for(i=pos-1,j=0;i<=pos+len-2;i++,j++)
Sub.ch[j]=S.ch[i];
Sub.length=len;
}
}
int strdelete(HString &S, int pos, int len)
{
int i;
if(pos<1||pos>S.length||len<0||len>S.length-pos+1)
return 0;
for(i=pos+len;i<=S.length;i++)
{
S.ch[i-len-1]=S.ch[i-1];
}
S.length-=len;
return 0;
}
int Strlength(HString &S)
{
return S.length;
}
int concat(HString &T, HString S1,HString S2)
{
int i,j;
if(T.ch)
free(T.ch);
if(!(T.ch=(char *)malloc((S1.length+S2.length)*sizeof(char))))
exit(0);
T.length=S1.length+S2.length;
for(i=0;i<S1.length;i++)
T.ch[i]=S1.ch[i];
for(i=0,j=S1.length;j<T.length;j++,i++)
T.ch[j]=S2.ch[i];
return 1;
}
int strcompare(HString S,HString T)
{
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;
}
int index(HString &S,HString *T,int pos)
{
HString sub;
int i,n,m;
if(pos>0)
{
n=Strlength(S);
m=Strlength(*T);
i=pos;
while(i<=n-m+1)
{
SubString(sub,S,i,m);
if(strcompare(sub,*T)!=0)
++i;
else return i;
}
}
return 0;
}
int main()
{
int i;
HString S,W,P,D;
HString Sub;
HString M[]={"g",1};
char T[]={"abcdefg"};
char k[]={"123"};
char h[]={"456"};
initstring(&S);
StrAssign(S,T);
printf("StrAssign(S,T): ");
for(i=0;i<S.length;i++)
printf("%c",S.ch[i]);
printf("\n");
SubString(Sub,S,2,3);//取子串
printf("SubString(Sub,S,2,3): ");
for(i=0;i<Sub.length;i++)
printf("%c",Sub.ch[i]);
printf("\n");
printf("index(S,M,1): %d\n",index(S,M,1));//子串M在主串S中起始位置,pos=开始位查找,pos=0时直接返回
strdelete(S,7,1);//删字符
printf("strdelete(S,7,1): ");
for(i=0;i<S.length;i++)
printf("%c",S.ch[i]);
printf("\n");
initstring(&W);//初始化W
initstring(&P);//初始化P
StrAssign(W,k);
StrAssign(P,h);
printf("strcompare(W,P): ");
if(strcompare(W,P)==0) printf("identical\n");//比较
else printf("different\n");
initstring(&D);//初始化D
concat(D,W,P);//链接D=W+P
printf("concat(D,W,P): ");
for(i=0;i<D.length;i++)
printf("%c",D.ch[i]);
printf("\n");
strinsert(D,5,S);//插入
printf("strinsert(D,5,S): ");
for(i=0;i<D.length;i++)
printf("%c",D.ch[i]);
printf("\n");
return 0;
}
//StrAssign(S,T): abcdefg
//SubString(Sub,S,2,3): bcd
//index(S,M,1): 7
//strdelete(S,7,1): abcdef
//strcompare(W,P): different
//concat(D,W,P): 123456
//strinsert(D,5,S): 12345abcdef6
//请按任意键继续. . .
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
char *ch;
int length;
}HString;
int initstring(HString *T)
{
(*T).ch=NULL;
(*T).length=0;
}
int StrAssign(HString &T,char *chars)
{
int len,i;
char *c;
if(T.ch)
free(T.ch);
len=strlen(chars);
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(0);
for(i=0;i<len;i++)
T.ch[i]=chars[i];
T.length=i;
}
return 1;
}
int strinsert(HString &S,int pos, HString T)
{
int i,j;
if(pos<1||pos>S.length+1)
return 0;
if(T.length)
{
if(!(S.ch=(char *)realloc(S.ch,(S.length+T.length)*sizeof(char))))
exit(0);
for(i=S.length-1;i>pos-1;--i)
S.ch[i+T.length]=S.ch[i];
for(i=pos-1,j=0;i<=pos+T.length-2;i++,j++)
S.ch[i]=T.ch[j];
S.length+=T.length;
}
return 1;
}
int SubString(HString &Sub, HString &S, int pos, int len)
{
int i,j;
if(pos<1||pos>S.length||len<0||len>S.length-pos+1)
return 0;
if(Sub.ch)
free(Sub.ch);
if(!len)
{
Sub.ch=NULL;
Sub.length=0;
}
else
{
Sub.ch=(char *)malloc(len *sizeof(char));
for(i=pos-1,j=0;i<=pos+len-2;i++,j++)
Sub.ch[j]=S.ch[i];
S.length=len;
}
}
int strdelete(HString &S, int pos, int len)
{
int i;
for(i=pos+len;i<=S.length;i++)
{
S.ch[i-len-1]=S.ch[i-1];
}
S.length-=len;
return 0;
}
int Strlength(HString &S)
{
return S.length;
}
int concat(HString &T, HString S1,HString S2)
{
int i,j;
if(T.ch)
free(T.ch);
if(!(T.ch=(char *)malloc((S1.length+S2.length)*sizeof(char))))
exit(0);
T.length=S1.length+S2.length;
for(i=0;i<S1.length;i++)
T.ch[i]=S1.ch[i];
for(i=0,j=S1.length;j<T.length;j++,i++)
T.ch[j]=S2.ch[i];
return 1;
}
int strcompare(HString S,HString T)
{
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;
}
int index(HString &S,HString *T,int pos)
{
HString sub;
int i,n,m;
if(pos>0)
{
n=Strlength(S);
m=Strlength(*T);
i=pos;
while(i<=n-m+1)
{
SubString(sub,S,i,m);
if(strcompare(sub,*T)!=0)
++i;
else return i;
}
}
return 0;
}
int main()
{
int i;
HString S,W,P,D;
HString Sub;
HString M[]={{"cde",3},{"abc",3},{"efg",3}};//M[]={"cde"};这个数组定义?
char T[]={"abcdefg"};
char k[]={"123"};
char h[]={"456"};
initstring(&S);
StrAssign(S,T);
SubString(Sub,S,2,3);
for(i=0;i<3;i++)
printf("%c",Sub.ch[i]);
printf("\n");
index(S,M,1);
strdelete(S,5,2);
puts(S.ch); //看看结果
initstring(&W);//初始化W
initstring(&P);//初始化P
StrAssign(W,k);
StrAssign(P,h);
strcompare(W,P);//比较
initstring(&D); //初始化D
concat(D,W,P);//链接D=W+P
puts(D.ch); //看看结果
return 0;
}
//bcd
//abcdefg
//123456
//请按任意键继续. . .