用C语言写出字符串匹配的代码
时间: 2024-12-29 15:32:56 浏览: 11
在C语言中,我们可以使用KMP算法或者Boyer-Moore算法来实现字符串匹配,这两种算法都比较高效。下面是一个使用KMP算法的基本示例,用于在一个较长的主串(text)中查找给定的模式串(pattern):
```c
#include <stdio.h>
#include <string.h>
// KMP表的构建函数
void build_lps(char pattern[], int lps[]) {
int index = 0;
int length = strlen(pattern);
lps[0] = 0;
while (index < length - 1) {
if (pattern[index] == pattern[index + 1]) {
lps[index + 1] = lps[index] + 1;
index++;
} else {
if (lps[index] != 0) // 如果前缀存在,则向前移动指针
index = lps[index];
else {
lps[index + 1] = 0; // 没有找到匹配,从头开始找
}
}
}
}
// KMP搜索函数
int kmp_search(char text[], char pattern[]) {
int text_len = strlen(text);
int pattern_len = strlen(pattern);
int index = 0;
int lps[] = {0}; // 初始化lps数组,先放0
build_lps(pattern, lps);
while (index < text_len && index < pattern_len) {
if (pattern[index] == text[index])
index++;
if (index > pattern_len)
break;
if (index == pattern_len)
return index; // 找到了匹配
if (text[index] != pattern[index + lps[index]])
index = index - lps[index]; // 否则,跳过已尝试过的部分
}
return -1; // 没有找到匹配
}
int main() {
char text[] = "ABABDABACDABC";
char pattern[] = "ABCD";
printf("Pattern found at index %d\n", kmp_search(text, pattern));
return 0;
}
```
这个程序首先构建了KMP表,然后在文本中查找模式,如果遇到匹配就前进,如果不匹配就根据KMP表调整位置。
阅读全文