字符串模式匹配普通算法C语言代码
时间: 2024-10-13 14:03:35 浏览: 44
基于字符串模式匹配算法的病毒感染检测问题 实验四(源代码+实验报告)
在C语言中,字符串模式匹配通常可以使用KMP(Knuth-Morris-Pratt)算法或Boyer-Moore算法实现,这两种算法都是针对字符串搜索优化的经典算法。以下是使用KMP算法的一个简单示例:
```c
#include <stdio.h>
#include <string.h>
// KMP 检查表生成函数
void compute_lps(char *pattern, int lps[]) {
int len = strlen(pattern);
lps[0] = 0;
int i = 1;
while (i < len) {
if (pattern[i] == pattern[lps[i - 1]]) {
lps[i] = lps[i - 1] + 1;
i++;
} else {
if (lps[i - 1] != 0)
i = lps[i - 1];
else
lps[i] = 0;
}
}
}
// 主函数进行模式匹配
int kmp_search(char *text, char *pattern) {
int text_len = strlen(text);
int pat_len = strlen(pattern);
int lps[pat_len]; // 记录失败跳转数组
compute_lps(pattern, lps);
int index = 0; // 当前字符索引
for (int i = 0; i < text_len; i++) {
while (index > 0 && text[i] != pattern[index]) {
index = lps[index - 1];
}
if (text[i] == pattern[index])
index++;
if (index == pat_len)
return i - pat_len + 1; // 匹配成功,返回起始位置
}
return -1; // 如果没有找到匹配,则返回-1
}
int main() {
char text[] = "ABABCABADC";
char pattern[] = "ABC";
int match_pos = kmp_search(text, pattern);
if (match_pos != -1)
printf("Pattern found at position %d\n", match_pos);
else
printf("Pattern not found\n");
return 0;
}
```
在这个代码中,`kmp_search` 函数会遍历文本,利用`lps`数组帮助查找模式在文本中的位置。如果找到匹配,就会返回起始位置;如果没有找到,最后返回-1。
阅读全文