下面集中操作呢,其实在C语言的函数库里都有,可以直接调用,这里的代码呢,只是为了大体了解内部机制,当需要自己写的时候,知道该怎么写
串的定义
这里采用的是变长分配存储表示
typedef struct
{
char *ch;
int length;
}Str;
1.赋值操作
int strcpy(Str &str,char *ch)
{
if(str.ch)
{
free(str.ch)
}
int len = 0;
char *c = ch;
while(*c)
{
++len;
++c;
}
if(len==0)
{
str.ch=NULL;
str.lenth=0;
return 1;
}
else
{
str.ch=(char*)malloc(sizeof(char)*(len+1));
if(str.ch==NULL)
return 0;
else
{
c=ch;
for(int i=0;i<=len;i++,c++)
str.ch[i]=*c;
str.length=len;
return 1;
}
}
}
2.串的比较
int strcmp(Str s1,Str s2)
{
for(int i=0;i<s1.length&&i<s2.length;i++)
if(s1.ch[i]!=s2.ch[i])
return s1.ch[i]-s2.ch[i];
return s1.length-s2.length;
}
3.串的连接
int strcat(Str &str, Str s1,Str s2)
{
if(str.ch)
{
free(str.ch);
str.ch=NULL;
}
str.ch=(char*)malloc(sizeof(char)*(s1.length+s2.length));
if(str.ch==NULL)
return 0;
int i=0;
while(i<s1.length)
{
str.ch[i]=s1.ch[i];
i++;
}
int j=0;
while(j<=s2.length)
{
str.ch[i+j]=s2.ch[i];
j++;
}
str.length=s1.length+s2.length;
return 1;
}
4.求子串
int substring(Str &substr,Str str,int pos,int len)
{
if(pos<0||pos>str.length||leng<0||len>(str.length-pos)
return 0;
if(substr.ch)
{
free(substr.ch);
substr.ch=NULL;
}
if(len==0)
{
substr.ch=NULL;
substr.length=0;
return 1;
}
else
{
substr.ch(char*)malloc(sizeof(char)*(len+1));
int i=pos;
int j=0;
while(i<pos+len)
{
substr.ch[j]=str.ch[i];
i++;
j++;
}
substr.ch[j]='\0';
substr.length=len;
return 1;
}
}