一、顺序存储。
1.首先定一个静态数组,然后定义i记录串的实际长度。(缺点:长度不可变)
2.使用malloc申请动态空间,定义指针指向串的地址。(需手动ferr)
方案一: 数组末尾记录长度
方案二:ch[0]充当length。首位置记录(字符的位序与数组下标相同)
方案三:末尾放/0,
二、链式存储。
1.每个结点存一个字符,然后用指针指向下一个结点。(存储密度低。改良方法,每个结点存储多个字符。若存不满,用特殊字符来补充)
三、基于顺序存储实现的基本操作
1.StrAssign(&T,chars):赋值操作。把串T赋值为chars。
StrCopy(&TS):复制操作。由串S复制得到串T。
StrEmpty(S):判空操作。若S为空串,则返回TRUE,否则返回
FALSE.StrLength(s):求串长。返回串S的元素个数。
ClearString(&s):清空操作。将S清为空串。
DestroyString(&s):销毁串。将串S销毁(回收存储空间)
Concat(&TS1,S2):串联接。用T返回由S1和S2联接而成的新串
2.求字串,
串SubString(&Sub,S,pos,len)求子串。用Sub返回串S的第pos个字符起长度为len的子串.
首先判断子串的长度是否越界。然后使i等于要返回的子串的首位序,利用循环,依次遍历,找到位序为字串首位序加子串的长度的字母。存放至新串中,并使新串长度等于子串的长度,返回新串。
3.比较两个串的大小。
StrCompare(s,T):比较操作。若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0。
利用循环,依次遍历两个串的每一个字符,并比较。如果字符不相等,则相减,根据返回值来判断大小。如果相等,则比较下一个字符。如果所有字符都相等,则长度大的串更大。如果长度也相等,则两个字符串相同。
4.在主串中找到子串的位置。
Index(S,T):定位操作。若主串S中存在与串T值相同的子串,则返回它在主串S中第一次出现的位置;否则函数值为0。
利用前两个操作,利用while循环在主串中从头取出与子串相同大小的子串,再依次比较两个子串是否相同,相同则返回,不同则取出下一个大小相同的子串,再进行比较。
总结: