• 串学习笔记


    一、概念:串string是由零个或多个字符组成的有限序列,又名字符串。

    1、有限,指长度是一个有限的数值。零个字符的串称为空串NULL string,它的长度为0。

    2、序列,说明串的相邻字符之间具有前驱和后继关系。

    空格串:只包含空格的串。空格串是有内容有长度的,要与空串区别开。

    子串和主串:串中任意个数的连续字符组成的子序列称为该串的子串;相应的,包含子串的串称为主串。子串在主串中的位置就是子串的第一个字符在主串中的序号。

    二、串的比较

    1、在C语言中比较两个串是否相等,必须是它们串的长度以及它们各个对应位置的字符都相等时,才算是相等。

    例如:要查找主串str中"abcdabcef",找到ttr子串"abcef"的位置。思路:从主串str第一位开始,str和ttr前3个字符都是匹配的,但是str主串中第4个字符d与子串ttr中的第4个字符e不匹配,所以就重新匹配。从主串str的第2个字符开始,发现,str中的第二个字符与子串中的第一个字符a不匹配,所以重新匹配。从str中第3个字符开始,与ttr第一个字符开始匹配。。。。(简单的说:就是对主串的每一个字符作为子串开头,与要匹配的字符串进行匹配,对主串做大循环,每个字符开头做ttr长度的小循环,直到匹配成功或全部遍历结束。)

    在比较的过程中,如果两串中字符相等,则继续往后匹配判断,如果不相等,记录主串当前位置的值必须退回到上次匹配首位的下一位,而记录子串当前位置的值退回到子串的首位。

     1 int Index(char *str, char *ttr, int pos)
     2 {
     3     int nStr, nTtr, sCnt, tCnt;
     4     nStr = strlen(str);  
     5     nTtr = strlen(ttr);
     6     sCnt = tCnt = 0;
     7 
     8     while (sCnt <= nStr && tCnt <= nTtr)
     9     {
    10         if (str[sCnt] == ttr[tCnt])
    11         {
    12             ++sCnt;
    13             ++tCnt;
    14         }
    15         else
    16         {
    17             sCnt = sCnt - tCnt + 1;
    18             tCnt = 0;
    19         }
    20     }
    21     if (tCnt > nTtr)
    22         return sCnt - nTtr;
    23     else
    24         return 0;
    25 }

     上面的方法是普通的模式匹配算法,但是这种算法有时效率不高,存在大量的重复遍历情况。

    KMP模式算法:(克努拉-莫里斯-普拉特算法)

  • 相关阅读:
    New version of VS2005 extensions for SharePoint 3.0
    QuickPart : 用户控件包装器 for SharePoint Server 2007
    随想
    发布 SharePoint Server 2007 Starter Page
    如何在SharePoint Server中整合其他应用系统?
    Office SharePoint Server 2007 中文180天评估版到货!
    RMS 1.0 SP2
    SharePoint Server 2007 Web内容管理中的几个关键概念
    如何为已存在的SharePoint站点启用SSL
    Some update information about Office 2007
  • 原文地址:https://www.cnblogs.com/zhou2011/p/2938643.html
Copyright © 2020-2023  润新知