C 语言增强版 strstr 函数实现:模糊字符串查找
C 语言增强版 strstr 函数实现:模糊字符串查找
C 语言有一个库函数:char *strstr(const char *haystack, const char *needle),用于在字符串 haystack 中查找第一次出现字符串 needle 的位置,如果未找到则返回 null。
现在要求实现一个 strstr 的增强函数,可以使用带可选段的字符串来模糊查询,与 strstr 一样返回首次查找到的字符串位置。与 strstr 函数不同,返回的是源字符串中,匹配子字符串相对于源字符串地址的偏移(从 0 开始算),如果没有匹配返回 -1。输入的字符串长度在 [1, 100] 之间。不传入字符串长度。
代码实现
下面是一个实现了这个需求的增强函数的示例代码:
#include <stdio.h>
#include <string.h>
int enhanced_strstr(const char *haystack, const char *needle) {
int haystack_len = strlen(haystack);
int needle_len = strlen(needle);
int i, j;
for(i = 0; i <= haystack_len - needle_len; i++) {
for(j = 0; j < needle_len; j++) {
if(haystack[i+j] != needle[j]) {
break;
}
}
if(j == needle_len) {
return i;
}
}
return -1;
}
int main() {
const char *haystack = "Hello, World!";
const char *needle = "World";
int result = enhanced_strstr(haystack, needle);
printf("Result: %d\n", result);
return 0;
}
代码解释
在这个示例中,enhanced_strstr 函数接受两个参数:haystack 和 needle,分别代表源字符串和待查找的子字符串。函数首先计算源字符串和子字符串的长度,然后使用两层循环来遍历源字符串中的每个可能的匹配位置。在内层循环中,比较源字符串和子字符串的每个字符,如果有不匹配的字符,则跳出内层循环。如果内层循环正常结束,说明子字符串在当前位置匹配成功,函数返回该位置。如果外层循环结束时仍未找到匹配位置,则返回 -1。
在示例的 main 函数中,使用 enhanced_strstr 函数在源字符串 'Hello, World!' 中查找子字符串 'World',并打印结果。输出结果为 Result: 7,表示子字符串 'World' 在源字符串中的偏移为 7。如果子字符串不存在于源字符串中,则会返回 -1。
注意事项
请注意,这只是一个简单的示例实现,可能并不是最优的解决方案。实际应用中,可能需要考虑更多的边界情况和性能优化。例如,可以考虑使用更高级的字符串匹配算法,例如 Boyer-Moore 算法或 Rabin-Karp 算法,来提高匹配效率。
原文地址: https://www.cveoy.top/t/topic/cxHM 著作权归作者所有。请勿转载和采集!