实现串的基本操作算法_18 串是什么?

25fe50d372f02159b1081fed0f2386ec.png

串是什么?

串(string)是由零个或多个字符组成的有限序列,又名叫字符串

空格串:是只包含空格的串,注意他与空串的区别,空格串是有内容有长度的,二期可以不止一个空格子串和主串:串中任意个数的连续字符组成的子序列称为该串的子串,相应的,包含子串的串称为主串

串的比较:

串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号

计算机中常用的字符是使用标准的ASCII编码,是由7位二进制数表示的一个字符,总共可以表示128个字符

后来由于一些特殊符号的出现,128个是不够用的,扩展ASCII码由8位二进制数表示一个字符,总和可以表示256个字符,基本可以满足英语为主的语言和特殊字符需要

不过对于全世界估计要成百上千种语言,256个字符肯定是不够的,于是有了Unicode编码,常用16位的二进制表示一个字符,总共可以表示216个字符,约65万多字符,足够表示世界上所有语言的所有字符,为了兼容,其前256个字符与ASCII相同

所以我们比较串,必须他们串的长度和他们对应位置的字符都相等时,才算是相等

串的抽象数据类型:

串的逻辑结构和线性表很相似,不同的地方在于串针对的是字符集,也就是串中的元素都是字符

因此对于串的基本操作和线性表是很大差别的,线性表更关注单个元素的操作,比如查找一个元素,插入或者删除一个元素,但是串中国更多的是查找子串位置,得到指定位置子串,替换子串等操作

d137cc810375a133334db0d7592569a9.png

看一个操作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 */
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值