一.串的概念
串是由零个或多个字符组成的有限序列,又称字符串。
长度:串中字符的个数,称为串的长度。
空串:长度为零的字符串称为空串。
空格串:由一个或多个连续空格组成的串称为空格串。
串相等:两个串相等,是指两个串的长度相等且对应的字符都相等。
子串:串中任意连续的字符组成的子序列称为该串的子串。
主串:包含子串的串为该子串的主串。
二.串的基本操作
1.串的结构
typedef struct
{
char *data;
int length;
}String;
2.串的赋值 StrAssign(&T,chars):赋值操作。把串T赋值为chars。
bool StrAssign(String *S,char *t)
{
int len=strlen(t);
if(S==NULL||len==0)return false;
for(int i=0;i<len;i++)
S->data[i]=t[i];
S->length=len;
return true;
}
3.串的复制 StrCopy(&T,S):复制操作。由串S复制得到串T。
bool StrCopy(String *T,String S)
{
if(T==NULL)return false;
T->data=S.data;
T->length=S.length;
return true;
}
4.求串长 StrLength(S):求串长。返回串S的元素个数。
int StrLength(String S)
{
return S.length;
}
5.串的插入 在串str1的pos位置插入串str2
SString strInsert(SString str1,int pos,SString str2)
{
if(pos<1||pos>str1->length)
{
printf("插入位置错误!\n");
exit(0);
}
int i;
for(i=pos;i<=str1->length;i++)
{
str1->ch[i+str2->length]=str1->ch[i];
}
for(i=1;i<=str2->length;i++)
{
str1->ch[i+pos-1]=str2->ch[i];
}
str1->length=str2->length+str1->length;
return str1;
}
6.串的删除 删除指定位置的字符
SString strDelete(SString str,int pos,int len)
{
if(pos<1||pos>str->length||len+pos-1>str->length)
{
printf("删除位置错误!\n");
exit(0);
}
int i;
for(i=pos+len;i<=str->length;i++)
{
str->ch[i-len]=str->ch[i];
}
str->length=str->length-len;
return str;
}
7.串的比较
Status StrCmp(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 0;
}
8.串的连接 串拼接,将S1,S2拼接后用T返回
Status Concat(HString &T,HString S1,HString S2)
{
int i;
InitString(T);
T.length=S1.length+S2.length;
T.ch=(char*)malloc(T.length*sizeof(char));
if(!T.ch)
exit(overflow);
for(i=0;i<S1.length;i++)
T.ch[i]=S1.ch[i];
for(i=0;i<S2.length;i++)
T.ch[S1.length+i]=S2.ch[i];
return ok;
}
【(15条消息) 重学数据结构:串的基本操作(C语言)_Ken_Li_Lsq的博客-CSDN博客】
【(15条消息) 串的基本知识及操作_111辄的博客-CSDN博客_串的基本操作】
【(15条消息) 字符串的基本操作(包括串赋值,串拼接,求子串,查找串,删除与插入等等)_凉柒-lq的博客-CSDN博客_串的赋值操作】