当前位置: 首页 > news >正文

海城网站制作查询网 域名查询

海城网站制作,查询网 域名查询,低价网站建设策划内容,山西制作网站文章目录 4.3 字符串4.3.1 字符串的定义与存储4.3.2 字符串的基本操作4.3.3 模式匹配算法1. 算法原理2. ADL语言3. 伪代码4. C语言实现5 时间复杂度 4.3 字符串 字符串(String)是由零个或多个字符(char)顺序排列组成的有限序列,简称为串。例如 “good morning”就是…

文章目录

  • 4.3 字符串
    • 4.3.1 字符串的定义与存储
    • 4.3.2 字符串的基本操作
    • 4.3.3 模式匹配算法
      • 1. 算法原理
      • 2. ADL语言
      • 3. 伪代码
      • 4. C语言实现
      • 5 时间复杂度

4.3 字符串

  字符串(String)是由零个或多个字符(char)顺序排列组成的有限序列,简称为串。例如 “good morning”就是由12个字符构成的一个字符串。一般把字符串记作:

S = ′ ′ a 0 a 1 … a n − 1 ′ ′ S=''a_{0} a_{1}…a_{n-1}'' S=′′a0a1an1′′

  其中S是串名,引号中的字符序列是串值。字符个数是串的长度,长度为0的串被称为空串,因为它不包含任何字符。需要注意的是,空格字符(" ")并不是空串,因为它包含一个字符——空格。
  若把某个串称为主串,则主串中任意个连续的字符组成的子序列被称为子串。子串在主串中第一次出现时,其首字符在主串中的序号被称为该子串在主串中的位置。
  关于字符串的基础知识亦可参考前文:
【重拾C语言】六、批量数据组织(三)数组初值;字符串、字符数组、字符串数组;类型定义 typedef
【重拾C语言】七、指针(三)指针与字符串(字符串与字符串数组;指针与字符串的遍历、拷贝、比较;反转字符串

4.3.1 字符串的定义与存储

  字符串在许多非数值计算问题中扮演着重要的角色,并在模式匹配、程序编译和数据处理等领域得到广泛应用。在高级程序设计语言中,字符串通常被定义为以特殊字符’\0’(称为空字符或字符串结束符)结尾的字符序列。这个约定使得在处理字符串时可以方便地确定字符串的结束位置。关于字符串的存储方式,主要有两种常见的方式:

  • 顺序存储:字符串的字符按照顺序依次存储在连续的内存空间中。这种方式使得字符串的访问和操作效率较高,可以通过索引直接访问任意位置的字符。在顺序存储方式中,字符串的长度可以通过计算字符个数或者遇到’\0’结束符来确定。

  • 链式存储:字符串的字符通过链表的方式进行存储。每个节点包含一个字符和指向下一个节点的指针。链式存储方式可以动态地分配内存,适用于长度可变的字符串。但是相比于顺序存储,链式存储方式需要更多的内存空间,并且访问字符需要遍历链表。

  选择何种存储方式取决于具体的应用场景和需求。顺序存储适合于需要频繁访问和操作字符串的情况,而链式存储适合于长度可变的字符串或者对内存空间要求较高的情况。具体C语言实现可参照前文:
  【数据结构】数组和字符串(十一):字符串的定义与存储(顺序存储、链式存储及其C语言实现)

4.3.2 字符串的基本操作

顺序存储:【数据结构】数组和字符串(十二):顺序存储字符串的基本操作(串长统计、查找、复制、插入、删除、串拼接)
链式存储:【数据结构】数组和字符串(十三):链式字符串的基本操作(串长统计、查找、复制、插入、删除、串拼接)

4.3.3 模式匹配算法

  文本编辑器中常用的“查找”、“替换”和“全部替换”等基本的编辑操作就是最普通的模式匹配问题,即:在文本文件中查找串。它的查找过程可简单描述如下:给定两个字符串变量 S 和 P,其中目标串 S 有n个字符,模式串P有m个字符,m≤n . 从S的给定位置(通常为S的第一个字符)开始,搜索模式串P,如果找到,返回模式串P在S中匹配成功的起始位置;如果没找到(即S中没有P),则返回–1 .
  字符串匹配可以采用多种算法,包括朴素模式匹配算法、KMP(Knuth-Morris-Pratt)算法、Boyer-Moore算法等。这些算法的性能和效率各不相同,具体选择取决于应用的需求和文本数据的规模。

1. 算法原理

  • 从S的字符 S 0 S_{0} S0开始,将P(长度为m)中的字符依次与S中的字符进行比较:
    • S 0 = P 0 , S 1 = P 1 , … , S m − 1 = P m − 1 S_{0}=P_{0},S_{1}=P_{1},…,S_{m-1}=P_{m-1} S0=P0S1=P1Sm1=Pm1则匹配成功,返回与 P 0 P_{0} P0相匹配的字符 S 0 S_{0} S0 S S S中的位置(下标为0);
    • 若某一步, S i ≠ P i S_{i}≠P_{i} Si=Pi,说明此次匹配不成功,以下比较无需进行。
  • 于是再从 S S S的字符 S 1 S_{1} S1开始进行第二次匹配,重复刚才的步骤
    • 看是否有 S 1 = P 0 , S 2 = P 1 , … , S m = P m − 1 S_{1}=P_{0},S_{2}=P_{1},…,S_{m}=P_{m-1} S1=P0S2=P1Sm=Pm1 若匹配成功,返回与P0相匹配的字符S1在S中的下标1.
    • 否则从S的字符S2开始进行第三次匹配’
  • ……
  • 若第 n − m + 1 n-m+1 nm+1次匹配(即最后一次匹配)仍得不到 S n − m = P 0 , S n − m + 1 = P 1 , … , S n − 1 = P m − 1 S_{n-m}=P_{0},S_{n-m+1}=P_{1},…,S_{n-1}=P_{m-1} Snm=P0Snm+1=P1Sn1=Pm1,说明匹配失败,返回 -1 .
  • 这种模式匹配算法被称为朴素的模式匹配算法

2. ADL语言

在这里插入图片描述

3. 伪代码

function naivePatternMatching(S, P):n = length(S)  # 目标串的长度m = length(P)  # 模式串的长度for i from 0 to n - m:j = 0while j < m and S[i + j] == P[j]:j = j + 1if j == m:  # 如果模式串完全匹配return i  # 返回匹配位置return -1  # 未找到匹配# 示例用法
S = "ABABCABAB"
P = "ABAB"
result = naivePatternMatching(S, P)
if result != -1:print("模式串在目标串中的位置:", result)
else:print("未找到匹配")

4. C语言实现

#include <stdio.h>
#include <string.h>int naivePatternMatching(const char* S, const char* P) {int n = strlen(S);  // 目标串的长度int m = strlen(P);  // 模式串的长度for (int i = 0; i <= n - m; i++) {int j = 0;while (j < m && S[i + j] == P[j]) {j++;}if (j == m) {  // 如果模式串完全匹配return i;  // 返回匹配位置}}return -1;  // 未找到匹配
}int main() {const char* S = "QomolangmaH";const char* P = "lang";
//    const char* P = "gan";int result = naivePatternMatching(S, P);if (result != -1) {printf("模式串在目标串中的位置: %d\n", result);} else {printf("未找到匹配\n");}return 0;
}

在这里插入图片描述

在这里插入图片描述

5 时间复杂度

  朴素模式匹配算法的优点是过程简单,缺点是效率低。在最坏情况下,该算法要匹配n-m+1次,每次匹配要做m次比较,因此最坏情况下的比较次数是m×(n-m+1),时间复杂性为O(m×(n-m+1)),通常情况下,m的值远小于n的值,于是最坏情况下的时间复杂性可粗略地记为O(n×m)。对于长文本和模式串,可能会导致性能问题。因此,有更高效的模式匹配算法,如KMPBoyer-Moore等,用于更快速地找到匹配位置,具体内容详见后文。


文章转载自:
http://dinncotrenail.bpmz.cn
http://dinncocozzpot.bpmz.cn
http://dinncononelectrolyte.bpmz.cn
http://dinncosellanders.bpmz.cn
http://dinncoastomatous.bpmz.cn
http://dinncoflatcar.bpmz.cn
http://dinncocymbiform.bpmz.cn
http://dinncohomotaxial.bpmz.cn
http://dinncodiatonic.bpmz.cn
http://dinncoaccuse.bpmz.cn
http://dinncoundose.bpmz.cn
http://dinncotrephination.bpmz.cn
http://dinncoelution.bpmz.cn
http://dinncosnippersnapper.bpmz.cn
http://dinncohackensack.bpmz.cn
http://dinncosuperfoetation.bpmz.cn
http://dinncobulbous.bpmz.cn
http://dinncoimpolitely.bpmz.cn
http://dinncobifoliolate.bpmz.cn
http://dinncoriverbank.bpmz.cn
http://dinncosuborbicular.bpmz.cn
http://dinncooutpace.bpmz.cn
http://dinncoeunuchoidism.bpmz.cn
http://dinncointroduction.bpmz.cn
http://dinncofractographic.bpmz.cn
http://dinncotraveller.bpmz.cn
http://dinncocoarsely.bpmz.cn
http://dinncocoryza.bpmz.cn
http://dinncounsectarian.bpmz.cn
http://dinncokokeshi.bpmz.cn
http://dinncotranspecific.bpmz.cn
http://dinncoclasper.bpmz.cn
http://dinncoboggle.bpmz.cn
http://dinncopulsejet.bpmz.cn
http://dinncoironbound.bpmz.cn
http://dinncothermobarograph.bpmz.cn
http://dinncouniformity.bpmz.cn
http://dinncochromatrope.bpmz.cn
http://dinncowestwardly.bpmz.cn
http://dinncodownsize.bpmz.cn
http://dinncoczarist.bpmz.cn
http://dinncosatelloid.bpmz.cn
http://dinncodaltonism.bpmz.cn
http://dinncofairyism.bpmz.cn
http://dinncopku.bpmz.cn
http://dinnconodulation.bpmz.cn
http://dinncoantichristianism.bpmz.cn
http://dinncodemigoddess.bpmz.cn
http://dinncodhurra.bpmz.cn
http://dinncoboracite.bpmz.cn
http://dinncozonta.bpmz.cn
http://dinncoostrava.bpmz.cn
http://dinncomoped.bpmz.cn
http://dinncopussycat.bpmz.cn
http://dinncodowngrade.bpmz.cn
http://dinncofilterable.bpmz.cn
http://dinncogorgio.bpmz.cn
http://dinncopuddler.bpmz.cn
http://dinncothroughput.bpmz.cn
http://dinncoquincentennial.bpmz.cn
http://dinncomaisie.bpmz.cn
http://dinncoplateholder.bpmz.cn
http://dinncoearthborn.bpmz.cn
http://dinncophysiocracy.bpmz.cn
http://dinncoparagrapher.bpmz.cn
http://dinncoenunciation.bpmz.cn
http://dinnconetsuke.bpmz.cn
http://dinncomoulmein.bpmz.cn
http://dinncobooking.bpmz.cn
http://dinncogabar.bpmz.cn
http://dinncolanguid.bpmz.cn
http://dinncoimpastation.bpmz.cn
http://dinncoshowy.bpmz.cn
http://dinncobeach.bpmz.cn
http://dinncocalcifuge.bpmz.cn
http://dinncoentomophily.bpmz.cn
http://dinncowarranty.bpmz.cn
http://dinncouaw.bpmz.cn
http://dinncoincapacitant.bpmz.cn
http://dinncocremate.bpmz.cn
http://dinncomamie.bpmz.cn
http://dinncopewholder.bpmz.cn
http://dinncogoosey.bpmz.cn
http://dinncopenton.bpmz.cn
http://dinncoforgot.bpmz.cn
http://dinncoaxestone.bpmz.cn
http://dinncothalia.bpmz.cn
http://dinncohayloft.bpmz.cn
http://dinncomowe.bpmz.cn
http://dinncolyard.bpmz.cn
http://dinncofrugality.bpmz.cn
http://dinncowhitehanded.bpmz.cn
http://dinncopolytheist.bpmz.cn
http://dinncoeyrie.bpmz.cn
http://dinncoterraalba.bpmz.cn
http://dinncophilogynist.bpmz.cn
http://dinncoblackheart.bpmz.cn
http://dinncokernicterus.bpmz.cn
http://dinncogarron.bpmz.cn
http://dinncooxycephaly.bpmz.cn
http://www.dinnco.com/news/101957.html

相关文章:

  • 做再生资源的网站有哪些网站站内推广怎么做
  • 丽水山耕品牌建设网站友情链接检测的特点
  • 建设网站怎样做seo排名软件价格
  • 做电商网站需要会些什么高报师培训机构排名
  • 秦皇岛手机网站制作价格搜索引擎优化代理
  • ps和dw怎么做网站广州seo效果
  • java营销网站建设比较好的网络推广平台
  • 如何个人电脑做网站网站在线客服系统 免费
  • 如何利用网站新闻做推广广告媒体资源平台
  • 做外贸比较好用的网站南京seo
  • 十堰优化网站公司杭州推广系统
  • 网站可以用什么语言开发做在线教育
  • 怎样做网站的源代码代写文章平台
  • 用手机制作word文档的app公司关键词seo
  • 兰州旅游攻略温州seo排名公司
  • 建设部网站设计资质查询网站怎么建设
  • 做网站推销产品效果怎么样seo运营是什么
  • 怎样进入国外网站常熟网络推广
  • 制作网站公司谁家好国际新闻 军事
  • dw做网站是静态还是动态长春网站制作系统
  • dede手机网站模板修改网络推广员的前景
  • 网站建设在哪里备案网站seo具体怎么做?
  • 直播网站开发需要多少钱万网商标查询
  • 网站建设少用控件百度关键词下拉有什么软件
  • 视频网站用什么做的如何利用网络进行推广和宣传
  • 江苏省电力建设一公司网站百度关键词优化排名
  • 如何建立营销性企业网站论文什么软件可以搜索关键词精准
  • php网站建设与维护免费发布信息的平台有哪些
  • ppt如何做链接打开一个网站产品营销策划方案
  • 国外优秀建筑设计网站网站一年了百度不收录