C语言中的字符串匹配算法实现
在C语言中,字符串匹配算法用于判断一个字符串是否包含另一个字符串。本文将介绍几种常见的字符串匹配算法及其实现。
一、暴力匹配算法(Brute-Force Algorithm)
暴力匹配算法是最简单直观的字符串匹配算法,也被称为朴素字符串匹配算法。
算法思想:从主字符串的第一个字符开始,依次与模式字符串的字符逐个比较,如果出现字符不匹配的情况,则主字符串的指针后移一位,再从下一个字符开始重新比较。
字符串截取c语言实现代码示例:
```c
#include <stdio.h>
#include <string.h>
int bruteForceMatch(char *str, char *pattern) {
    int len1 = strlen(str);
    int len2 = strlen(pattern);
    int i = 0, j = 0;
    while(i < len1 && j < len2) {
        if(str[i] == pattern[j]) {
            i++;
            j++;
        } else {
            i = i - j + 1;
            j = 0;
        }
    }
    if(j == len2) {
        return i - len2; // 返回匹配位置的索引
    } else {
        return -1; // 未到匹配
    }
}
int main() {
    char str[] = "Hello, world!";
    char pattern[] = "world";
    int index = bruteForceMatch(str, pattern);
    if(index >= 0) {
        printf("匹配成功,匹配位置为:%d\n", index);
    } else {
        printf("未到匹配\n");
    }
    return 0;
}
```
上述示例代码中,我们使用了一个bruteForceMatch函数来实现暴力匹配算法。该函数的输入为两个字符串,返回值为匹配位置的索引,如果未到匹配则返回-1。
二、KMP算法(Knuth-Morris-Pratt Algorithm)
KMP算法是一种改进的字符串匹配算法,通过利用模式字符串的已匹配部分信息来提高匹配效率。
算法思想:在暴力匹配算法的基础上,当出现字符不匹配时,不需要回溯到主字符串的下一个字符重新开始比较,而是根据模式字符串的特性,选择一个新的比较位置。
实现代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void calculateNext(char *pattern, int *next) {
    int len = strlen(pattern);
    int i = 0, j = -1;
    next[0] = -1;
    while(i < len - 1) {
        if(j == -1 || pattern[i] == pattern[j]) {
            i++;
            j++;
            next[i] = j;
        } else {
            j = next[j];
        }
    }
}
int kmpMatch(char *str, char *pattern) {
    int len1 = strlen(str);
    int len2 = strlen(pattern);
    int *next = (int *)malloc(sizeof(int) * len2);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。