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小时内删除。
发表评论