C语言朴素模式匹配算法实例代码

以下是“C语言朴素模式匹配算法实例代码”的完整攻略。

什么是朴素模式匹配算法?

朴素模式匹配算法是一种简单的字符串匹配算法,它基于蛮力法: 遍历主串中的每个字符,每找到一个位置与模式串的第一个字符匹配,就从后续位置开始一个个比较主串和模式串中的字符是否相同,如果某个字符不匹配,则回到主串中对应的位置重新比较。

朴素模式匹配算法的实现原理

下面是C语言实现朴素模式匹配算法的程序代码执行过程:

  1. 主函数中定义两个字符数组分别为主串和模式串,并分别输入两串的值;
  2. 然后在主串中按照顺序比较每一个字符是否与模式串中的第一个字符相等;
  3. 如果匹配成功,则在主串和模式串中同步移动下一位字符,继续比较下一个字符是否相等;
  4. 如果匹配失败,则从主串中的下一个字符开始重新比较;
  5. 如果模式串的第一个字符与主串中的某个字符匹配,并且模式串与主串中的字符全部匹配成功,那么匹配就成功了。

代码实现

下面是朴素模式匹配算法的C语言实现代码示例:

#include <stdio.h>
#include <string.h>

int naive_match(char* str, char* pattern) {
    int i, j;
    int slen = strlen(str);
    int plen = strlen(pattern);
    for (i = 0; i <= slen - plen; i++) {
        for (j = 0; j < plen; j++) {
            if (str[i + j] != pattern[j]) {
                break;
            }
        }
        if (j == plen) {
            return i;
        }
    }
    return -1;
}

int main() {
    char str[] = "hello world";
    char pattern[] = "world";
    int index = naive_match(str, pattern);
    if (index == -1) {
        printf("匹配失败");
    } else {
        printf("匹配成功,匹配位置为:%d", index);
    }
    return 0;
}

代码示例说明

以上代码通过输入一个字符串和另一个需要匹配的模式串,利用朴素模式匹配算法实现了对目标字符串中特定模式的查找,找到模式串和目标字符串匹配成功后输出匹配位置,如果匹配失败则输出“匹配失败”。

以下是另外一条代码实例:

#include<stdio.h>
#include<string.h>

int naive_match(char* str, char* pattern) {
    int i, j;
    int slen = strlen(str);
    int plen = strlen(pattern);
    for (i = 0; i <= slen - plen; i++) {
        for (j = 0; j < plen; j++) {
            if (str[i + j] != pattern[j]) {
                break;
            }
        }
        if (j == plen) {
            return i;
        }
    }
    return -1;
}

int main() {

    char str[] = "who sees who";
    char pattern[] = "who";
    int index = naive_match(str, pattern);
    if (index == -1) {
        printf("匹配失败");
    } else {
        printf("匹配成功,匹配位置为:%d", index);
    }
    return 0;
}

以上代码同样通过输入一个字符串和另一个需要匹配的模式串,同样利用朴素模式匹配算法实现了对目标字符串中特定模式的查找,找到模式串和目标字符串匹配成功后输出匹配位置,如果匹配失败则输出“匹配失败”。

以上就是朴素模式匹配算法的完整攻略,希望可以对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言朴素模式匹配算法实例代码 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • SQL Server数据库bcp导出备份文件应用示例

    下面我将详细讲解“SQL Server数据库bcp导出备份文件应用示例”的完整攻略,并且提供两个示例说明。 简介 bcp是SQL Server的一个命令行实用程序,可以用于快速的批量导入/导出数据到SQL Server。其中,使用bcp导出数据时,可以将数据导出到文本文件中,这些文本文件可以轻松备份、存储或传输SQL Server数据。在进行导出的过程中,我…

    C 2023年5月23日
    00
  • C、C++程序中的堆栈损坏问题

    题目中的“堆栈损坏问题”指的是指针操纵错误,这种错误经常出现在使用 C、C++ 等语言编写的程序中,如何解决这种问题呢? 什么是堆栈损坏 堆栈损坏是指在代码中对于已经申请的内存没有正确的管理,导致程序崩溃的错误。分为以下两种情况: 数组越界:在数组申请时预估错误导致数组越界,比如数组长度为10,但却访问了11个元素,这会导致程序崩溃。 内存泄漏:在申请堆内存…

    C 2023年5月9日
    00
  • JSON字符串和JSON对象相互转化实例详解

    下面是关于“JSON字符串和JSON对象相互转化实例详解”的攻略: 1. 什么是JSON? JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript语言的语法,但独立于编程语言和硬件平台。在Web应用程序中,它通常用于从Web服务器向Web浏览器传输数据。 2. JSON对象和JSON字符串的…

    C 2023年5月23日
    00
  • C#使用Clipboard类实现剪贴板功能

    C#使用Clipboard类实现剪贴板功能 导读 剪贴板是电脑生产过程中至关重要的一部分,通过使用剪贴板,我们可以在不同的应用程序和文本之间快速、方便地复制和粘贴数据。在C#中,我们可以使用Clipboard类来实现剪贴板的功能,本文将详细讲解如何在C#应用程序中使用Clipboard类来实现剪贴板功能。 使用Clipboard类 在C#中,Clipboar…

    C 2023年5月23日
    00
  • c++实现简单随机数的代码

    当我们需要在程序中生成一个随机数时,可以使用C++标准库中的<random>头文件提供的随机数生成器。该头文件提供了多种随机数生成器以及分布函数,可以实现不同类型和范围的随机数生成。 下面是生成一个简单的1-100之间的随机数的代码示例: #include <iostream> #include <random> int …

    C 2023年5月24日
    00
  • 华为揽阅M2平板电脑做工怎么样?华为揽阅M2 10.0指纹平板拆机全过程图解

    华为揽阅M2是一款高性能的平板电脑,其外观和内部设计都十分精细,以下是关于此设备做工的详细分析以及拆机攻略。 华为揽阅M2平板电脑做工分析 外观设计 华为揽阅M2采用了一块10.1英寸的IPS触控屏幕,屏幕分辨率为1920*1200像素,支持10点触控和电磁笔输入。整个设备的外观采用了金属材质,手感舒适,整机重量为约500克。 在机身的四周布置了一些按钮、接…

    C 2023年5月22日
    00
  • C语言实现走迷宫

    当我们想要C语言实现走迷宫时,我们需要考虑以下步骤: 定义迷宫的数据结构与迷宫的初始化。 使用DFS或BFS等算法遍历迷宫。 处理搜索的结果,输出路径或者其他信息。 下面我将详细解释如何实现这些步骤。 定义迷宫的数据结构与迷宫的初始化 迷宫的数据结构通常使用二维字符数组来表示,其中每个位置包含一个字符表示当前位置的状态。我们可以使用常见的“#”代表障碍物,使…

    C 2023年5月23日
    00
  • C语言实现求定积分的方法

    C语言实现求定积分的方法 在C语言中实现求定积分的方法可以采用数值积分的方式,其中常用的方法有梯形法、辛普生法和龙贝格法。 梯形法 梯形法是最简单的数值积分方法之一,具体实现步骤如下: 将积分区间[a,b]分成n个小区间,每个小区间宽度为h=(b-a)/n。 计算每个小区间左右两端点的函数值后求平均值,得到该小区间的梯形面积。 将所有小区间梯形面积相加,得到…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部