#include<stdio.h>
#include<stdlib.h>
typedef struct
{
char *ch;
int length;
}HString;
void Init(HString &S,char s[])//初始化一个串
{
int s_length=0;
for(int i=0;s[i]!='\0';i++)
s_length++;
S.ch=(char *)malloc(sizeof(char)*(s_length+1)) ;
for(int i=0;i<s_length;i++)
S.ch[i]=s[i];
S.length=s_length;
}
int Strlength(HString S)//返回字符串的长度
{
return S.length;
}
int StrCompare(HString S,HString T)//比较两个串,S>T,返回正数,S<T,返回负数
{
int i=0;
while(i<S.length&&i<T.length&&S.ch[i]==T.ch[i])
i++;
return S.ch[i]-T.ch[i];
}
void ClearStr(HString &S)
{
if(S.ch)
free(S.ch);
S.length=0;
}
void Print(HString S)//打印字符串
{
for(int i=0;i<S.length;i++)
printf("%c",S.ch[i]);
printf("\n");
}
int ConcatStr(HString &T,HString S1,HString S2)//将S1 S2连接以后给T
{
T.ch=(char *)malloc(sizeof(char)*(S1.length+S2.length));
int i=0,j=0;
while(i<S1.length)
{
T.ch[i]=S1.ch[i];
i++;
}
while(j<S2.length)//从赋值完S1的位置继续赋值
{
T.ch[i++]=S2.ch[j++];
}
T.length=S1.length+S2.length;
return 1;
}
HString Substr(HString T,int pos,int len)//获取从T的第i(从0开始)个位置长度为len的字串并返回
{
HString sub;
sub.ch=(char*)malloc(sizeof(char)*len);
sub.length=len;
for(int i=pos,j=0;i<pos+len;i++,j++)
sub.ch[j]=T.ch[i];
return sub;
}
int main()
{
HString S1,S2,T;
char s1[6]={'a','b','c','d','e'};//注意保留一个位置保存\0
char s2[6]={'a','b','c','d','g'};//注意保留一个位置保存\0
Init(S1,s1);
Init(S2,s2);
Print(S1);
Print(S2);
int t=StrCompare(S1,S2);
printf("s1>s2? %d\n",t);
//ClearStr(S1);
//Print(S1);
ConcatStr(T,S1,S2);
Print(T);
HString sub=Substr(T,2,3);
Print(sub);
return 0;
}
串的基本操作
最新推荐文章于 2023-06-25 09:30:00 发布