存储结构
定长存储结构
typedef struct{ char str[maxSize+1]; int legth; } Str ;
变长存储结构
typedef struct{ char *ch; int legth; } Str ;
maxSize是已经定义的常量,+1是因为‘\0’的结束标记 二者都保留有利于程序的编写
如果超出maxsize,定长需要重新设计结构体,而变长只需要free
Str S;
S.length=L;
S.ch=( char* )malloc( (L+1)*sizeof(char) )
char a;
S.ch[1]=a;
a=S.ch[1];
free(S.ch)
基本操作:赋值,取串长度,串比较,求子串,串清空,串连接
赋值
int strAssign (Str &str,cha* ch)
{
if(srt.ch) free(s.ch);
int len=0;
char *c=ch;
while(*c)
{
++len;++c;
}
if(len==0)
{
str.ch=NULL;str.length=0;return 1;
}
else
{
str.ch=(char*malloc(sizeof(cha)*(len+1));
if(str.ch==NULL) return 0;
else
{
c=ch;
for(int i=0;i<lem;i++,c++)
{str.ch[i]=*c;}
str.length=len;return 1;
}
}
}
取串长度
int strLength(Str str){ return str.length; }
串比较
int strCompare(Str sl, Str s2)
{
for(int i=0;i<s1.length && i<s2.length;++i)
if (s1.ch[i]!=s2.ch[i])
return s1.ch[1l一s2.ch[t1;
return s1.length - s2. length;
}
串连接
int concat(Str &str,Str str1,Str str2 )
{
if(s.ch){free(str.ch);str.ch=NULL;}
str.ch=(char*)malloc(sizeof(char)*(str1.length+str2.length+1)); if(!str.ch) return 0;
int i=0;
while(i<str1.length)
{str.ch[i]=str1.ch[i];++i;
}
int j=0;
while(i<str2.length)
{str.ch[i+j]=str2.ch[j];++j;
}
s.length=str1.length+str2.length+1;
return 1
}
求子串
int subString (Str &substr,Str str,int pos,int len)
{
if(pos<0||pos>=str.length ||len<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;}
return 1;
}
}
清空串
void clearString(Str &str)
{
if(str.ch)
{free(str.ch);str.ch=NULL}
str.length=0;
}