zoukankan      html  css  js  c++  java
  • 字符串模式匹配

    2019/11/30

    字符串模式匹配

    若两个串长度相等且每个对应位置的字符都相等时,称这两个串 是相等的。

     

    1、定长顺序结构

    1 #define MAXLEN 255
    2 typedef struct{
    3   char ch[MAXLEN];
    4   int length;
    5 }SString;

    2、堆分配存储表示

    1 typedef struct{
    2   char *ch;
    3   int length;
    4 }

    上面五个操作称为 最小操作子集

     

    Index(S,T,pos):定位操作。若主串S中存在与串T值相同的子串,则返回它在主串S中第pos个字符后第一次出现的位置;

    否则函数值为0。

     1 int Index(String S, String T, int pos){
     2   if(pos>0){
     3     int n = StrLength(S);
     4     int m = StrLength(T);
     5     int i = pos;
     6     String sub = NULL;
     7   while(i<b-m+1){
     8     SubString(sub,S,i,m);
     9     if(StrCompare(sub,T)!=0)
    10       i++;
    11     else
    12       return i;
    13     }
    14   }
    15   return 0;
    16 }

    主串S:absaaasdcbvas

    串T:asd

    int position = Index(S,T,2);

     

    i-j+1是我们当前比较子串的第一个字符的位置

    i-j+2是下移了一个位置,找到下一个可能与当前模式串相同的子串,然后进行接下来的比较。

     1 int Index(SString S, SString T,int pos){
     2   int i=pos,j=1;  //主串位置i初始化为:初始寻找位置pos,j模式串位置初始化为1
     3   while(i<=S.length && j<=T.length){  //初始位置i小于等于主串的长度&&比较的子串这个标记有没有比较到最后一个字符,如果比较到最后,就可以终止循环了。
     4     if(S.ch[i]==T.ch[j]){    //判断当前对应标记字符是否相等。
     5       i++;  //如果相等,比较下一个字符
     6       j++;
     7     }
     8     else{  //不相等,将主串中子串第一个位置的标记下移一位,
     9       i=i-j+2;  //i-j+1是当前比较子串第一个字符的位置;i-j+2是下移了一个位置,找到下一个可能与模式串相同的子串,然后进行接下来的比较。
    10       j=1;  //模式串标记归1:还要从第一个位置开始比较
    11     }
    12     if(j>T.length)    //如果j比较到了最后一个位置,并且还是相等的,此时我们还要+1,就大于对应模式串的长度。
    13       return i-T.length;    //返回对应子串位置
    14     else
    15       return 0;    //失败返回0
    16   }
    17 }


    能有什么困难?都是可以解决的!

  • 相关阅读:
    24、可靠信号与不可靠信号
    24、sed用法
    26、linux shell常用的几个函数,diff
    21、Posix共享内存
    23、修改vim的tab,使其占4个空格
    25、linux shell常用的几个函数,sort
    Console算法有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和
    Console算法[for,if]一水仙花数(Water flower)
    Console算法回文数
    Console算法[for,if]有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数
  • 原文地址:https://www.cnblogs.com/LinQingYang/p/11963964.html
Copyright © 2011-2022 走看看