![25fe50d372f02159b1081fed0f2386ec.png](https://i-blog.csdnimg.cn/blog_migrate/d23c2d581b976325e3bdc9c0941b6ec5.jpeg)
串是什么?
串(string)是由零个或多个字符组成的有限序列,又名叫字符串
空格串:是只包含空格的串,注意他与空串的区别,空格串是有内容有长度的,二期可以不止一个空格子串和主串:串中任意个数的连续字符组成的子序列称为该串的子串,相应的,包含子串的串称为主串
串的比较:
串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号
计算机中常用的字符是使用标准的ASCII编码,是由7位二进制数表示的一个字符,总共可以表示128个字符
后来由于一些特殊符号的出现,128个是不够用的,扩展ASCII码由8位二进制数表示一个字符,总和可以表示256个字符,基本可以满足英语为主的语言和特殊字符需要
不过对于全世界估计要成百上千种语言,256个字符肯定是不够的,于是有了Unicode编码,常用16位的二进制表示一个字符,总共可以表示216个字符,约65万多字符,足够表示世界上所有语言的所有字符,为了兼容,其前256个字符与ASCII相同
所以我们比较串,必须他们串的长度和他们对应位置的字符都相等时,才算是相等
串的抽象数据类型:
串的逻辑结构和线性表很相似,不同的地方在于串针对的是字符集,也就是串中的元素都是字符
因此对于串的基本操作和线性表是很大差别的,线性表更关注单个元素的操作,比如查找一个元素,插入或者删除一个元素,但是串中国更多的是查找子串位置,得到指定位置子串,替换子串等操作
![d137cc810375a133334db0d7592569a9.png](https://i-blog.csdnimg.cn/blog_migrate/ca72bcc6a9b4b54b520a9f2956783e17.jpeg)
看一个操作index的实现算法:
使用了strlength,substring,strcompare等基本操作实现
/* T为非空串。若主串S中第pos个字符之后存在与T相等的子串, */
/* 则返回第一个这样的子串在S中的位置,否则返回0 */
int Index(String S, String T, int pos)
{
int n,m,i;
String sub;
if (pos > 0)
{
n = StrLength(S); /* 得到主串S的长度 */
m = StrLength(T); /* 得到子串T的长度 */
i = pos;
while (i <= n-m+1)
{
SubString (sub, S, i, m); /* 取主串中第i个位置长度与T相等的子串给sub */
if (StrCompare(sub,T) != 0) /* 如果两串不相等 */
++i;
else /* 如果两串相等 */
return i; /* 则返回i值 */
}
}
return 0; /* 若无子串与T相等,返回0 */
}