字符串匹配 分治法c语言实现
时间: 2023-08-13 09:03:09 浏览: 54
字符串匹配问题可以使用分治法来解决。具体实现步骤如下:
1. 将模式串和文本串分别划分成两半,分别为左半部分和右半部分。
2. 对于模式串的左半部分,在文本串的左半部分中进行匹配。
3. 对于模式串的右半部分,在文本串的右半部分中进行匹配。
4. 如果左半部分和右半部分都匹配成功,则匹配成功。
5. 如果左半部分和右半部分有一个匹配失败,则继续递归分治调用。
下面是使用C语言的代码实现:
```c
#include <stdio.h>
#include <string.h>
int match(char *text, char *pattern) {
int n = strlen(text);
int m = strlen(pattern);
if (m == 0) {
return 1;
}
if (n < m) {
return 0;
}
int i, j, k;
int mid = m / 2;
for (i = 0; i <= n - m; i++) {
if (text[i] == pattern[mid]) {
for (j = i, k = 0; k < mid; j++, k++) {
if (text[j] != pattern[k]) {
break;
}
}
if (k == mid && match(text + j, pattern + mid + 1)) {
return 1;
}
}
}
return 0;
}
int main() {
char text[100], pattern[100];
printf("Enter text: ");
fgets(text, sizeof(text), stdin);
text[strlen(text) - 1] = '\0';
printf("Enter pattern: ");
fgets(pattern, sizeof(pattern), stdin);
pattern[strlen(pattern) - 1] = '\0';
if (match(text, pattern)) {
printf("Match found\n");
} else {
printf("Match not found\n");
}
return 0;
}
```
在上面的代码中,`match`函数用于进行字符串匹配。它接受两个参数,分别为文本串和模式串。在函数中,首先判断了模式串为空的情况,如果模式串为空,则直接返回1。然后判断了文本串的长度是否小于模式串的长度,如果是,则直接返回0。接下来,将模式串和文本串分别划分成两半,并对左半部分和右半部分进行匹配。如果左半部分和右半部分都匹配成功,则匹配成功。如果左半部分和右半部分有一个匹配失败,则继续递归分治调用。最后,在`main`函数中,输入文本串和模式串,并调用`match`函数进行匹配,输出匹配结果。