数据结构(寒假小结)--3.3串

来源:互联网 发布:数据分析师笔试逻辑 编辑:程序博客网 时间:2024/06/05 16:30

1.本节学习要点:

2.基本定义与相关名词:

串(String)是零个或多个字符组成的有限序列。一般记为 S="a1a2……an",其中

     ①S是串名

     ②双引号括起的字符序列是串值;

    将串值括起来的双引号本身不属于串,它的作用是避免串与常数或与标识符混淆。

      【例】"123"是数字字符串,它不同于整常数123

      【例】"xl"是长度为2的字符串,而xl通常表示一个标识符。

     ③ai(1≤i≤n)可以是字母、数字或其它字符;

     ④串中所包含的字符个数称为该串的长度。

串长:串中所包含的字符个数。
空串(Empty String):长度为零,不含任何字符。
空白串(Blank String):由一个或多个空格组成的串。
子串:串中任意个连续字符组成的子序列。该串本身称为主串。
空串是任何串的子串,任何串是其自身的子串。
串中某字符在串中出现时的序号(从1开始)称为该字符在串中的位置;子串在主串中第一次出现时,子串的第一个字符在主串中的序号,称为该子串在主串中的位置。
例:A=“This is a string”   B=“is”
如果两个串的长度相同,并且各个对应位置上的字符也相同,则称这两个串相等。
串常量:只能引用不能改值,一般用直接量来表示。
串变量:值可以改变,必须用名字来识别。

3.基本运算:

1)赋值ASSIGN(S,T):将串T的值传给串S。strcpy(S,T)。

2)联接CONCAT(S,T):由S和T连接成新串,T接在S的后面。strcat(S,T)。

3)求串长LENGTH(S):求串S的长度。strlen(S)。

4)求子串SUBSTR(S,i,j):串S中第i个字符开始连续j个字符组成的子串。

5)串比较COMPARE(S,T)或判等EQUAL(S,T):前者比较两个串S和T的大小,结果小于、等于或大于0,表示S<T、S=T和S>T。后者比较两个串S和T是否相等,结果为1(相等)或0(不相等)。strcmp(S,T)。

6)插入INSERT(S,i,T):将串T插入到串S的第i个字符位置。

7)删除DELETE(S,i,j):从S中删除第i字符开始的连续j个字符

8)子串定位INDEX(S,T):在主串S中查找子串T第一次出现的位置或指针。T不能为空串。strstr(S,T)。

9)置换REPLACE(S,i,j,T)或REPLACE(S,T,R):前者用T置换S中第i个字符开始的连续j个字符;后者用R替换所有在S中出现的子串T。

4.BF算法:

1.子串定位又称串的模式匹配(Pattern Matching)或串匹配(String Matching),其中主串称为目标串,子串称为模式串。
2.朴素模式匹配算法(BF算法):利用判等、求串长和求子串等实现子串定位INDEX(S,T):依次从主串S中第i(i≥1)个字符开始,取出长度与T相同的子串和T比较,若相等则子串位置为i; 否则i增1取下一个子串比较,直到最后找到或没有。
3.图演示和代码:

int index(sqstring *s, sqstring *t){//BF算法  int i,j;    i=0,j=0;    while(i<s->n && j<t->n){      if(s->data[i]==t->data[j]){    i++;j++;  //对应字符相等时向后推进 }else {i=i-j+1; j=0;}      //i退到主串下一趟开始位置,j重新开始    }    if(j>=t->n) return i-t->n;//匹配成功,返回成功位置    else return -1;}

5.串的分类:

1.顺序串:串的顺序存储结构简称为顺序串。


2.链串:用单链表方式存储串值,串的这种链式存储结构简称为链串。

如果有错误请大家指出,共同学习共同进步奋斗奋斗





1 0
原创粉丝点击