如何修改此代码使其支持模糊匹配?
时间: 2024-11-12 19:46:59 浏览: 118
要在C语言中实现模糊匹配,你可以考虑使用通配符或者其他模式匹配库,比如fnmatch
函数。这里以fnmatch
为例,它是用于做简单模式匹配的标准库函数。如果你想允许用户输入的部分字符串作为查询条件,可以稍作修改如下:
#include <stdio.h>
#include <string.h>
#include <fnmatch.h>
void fuzzy_search(const char *pattern, const char *filename) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
perror("Failed to open file");
return;
}
char buffer[1024];
while (fgets(buffer, sizeof(buffer), file)) {
if (fnmatch(pattern, buffer, FNM_NOESCAPE | FNM_PATHNAME)) { // 使用 fnmatch 进行模糊匹配
printf("Line contains a match: \"%s\"\n", buffer);
}
}
fclose(file);
}
int main() {
char pattern[] = "*keyword*"; // 用户输入的模糊搜索模式,星号(*)代表任意字符
fuzzy_search(pattern, "your_file.txt"); // 替换为你需要搜索的文件路径
return 0;
}
在这个版本中,fnmatch
函数接受两个参数,一个是模式(如包含通配符的字符串),另一个是要搜索的字符串。FNM_NOESCAPE
标志告诉fnmatch
不要转义特殊字符,而FNM_PATHNAME
表示对路径名进行匹配。
然而,fnmatch
并不支持正则表达式,如果你需要更复杂的模式匹配,可能需要引入第三方库,例如 PCRE(Perl Compatible Regular Expressions)或者 POSIX Extended Regular Expression。
相关推荐


















