C 语言增强 strstr 函数实现模糊匹配
C 语言增强 strstr 函数实现模糊匹配
本文介绍了 C 语言中如何实现一个增强版的 strstr 函数,该函数支持模糊匹配,允许在搜索字符串中使用可选段进行匹配。可选段使用'[]'标识,表示该位置可以匹配任何一个可选字符。例如,'a[bc]' 可以匹配 'ab' 和 'ac'。该函数与 strstr 函数一样,返回匹配字符串在源字符串中首次出现的位置。
代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int enhanced_strstr(const char *haystack, const char *needle) {
int haystack_len = strlen(haystack);
int needle_len = strlen(needle);
for (int i = 0; i <= haystack_len - needle_len; i++) {
int matched = 1;
for (int j = 0; j < needle_len; j++) {
if (needle[j] == '[') {
int optional_matched = 0;
j++;
while (needle[j] != ']') {
if (needle[j] == haystack[i + j]) {
optional_matched = 1;
break;
}
j++;
}
if (!optional_matched) {
matched = 0;
break;
}
} else if (haystack[i + j] != needle[j]) {
matched = 0;
break;
}
}
if (matched) {
return i;
}
}
return -1;
}
int main() {
char haystack[100];
char needle[100];
printf("Enter the haystack: ");
scanf("%s", haystack);
printf("Enter the needle: ");
scanf("%s", needle);
int result = enhanced_strstr(haystack, needle);
if (result == -1) {
printf("Needle not found in haystack.
");
} else {
printf("Needle found at index %d.
", result);
}
return 0;
}
代码说明
该代码实现了以下功能:
- 循环遍历 haystack 字符串,每次从 haystack 中截取一个长度为 needle_len 的子字符串进行匹配。
- 循环遍历 needle 字符串,如果遇到 ']',则进入可选段匹配模式。
- 在可选段匹配模式中,循环遍历可选段字符,如果 haystack 中当前位置的字符与可选段中的某个字符匹配,则匹配成功。
- 如果 haystack 中当前位置的字符与 needle 中对应位置的字符不匹配,则匹配失败,跳出循环。
- 如果所有字符都匹配成功,则返回匹配字符串在 haystack 中首次出现的位置。
注意事项
- 该代码假设可选段中只会出现一个字符,而且可选段只能出现在 needle 字符串的末尾。
- 如果需要支持多个字符的可选字段,或者可选字段出现在 needle 字符串的其他位置,需要对代码进行相应的修改。
应用场景
该增强版 strstr 函数可以应用于以下场景:
- 模糊匹配搜索:在数据库查询或文件搜索中,使用该函数可以实现模糊匹配,提高搜索效率。
- 密码验证:在密码验证中,可以使用该函数来验证用户输入的密码是否与预设的密码匹配。
- 字符串匹配游戏:在一些字符串匹配游戏中,可以使用该函数来判断用户输入的字符串是否与目标字符串匹配。
总结
本文介绍了 C 语言中如何实现一个增强版的 strstr 函数,该函数支持模糊匹配,可以应用于多种场景。读者可以通过学习该函数的实现原理,掌握更灵活的字符串匹配方法。
原文地址: http://www.cveoy.top/t/topic/cv4u 著作权归作者所有。请勿转载和采集!