C语言实现strstr增强函数:支持模糊查询
C语言实现strstr增强函数:支持模糊查询
C语言标准库提供了一个函数 strstr(const char *haystack, const char *needle),用于在字符串 haystack 中查找第一个出现字符串 needle 的位置,如果未找到则返回 null。本文将实现一个增强版的 strstr 函数,支持带可选段的字符串模糊查询,例如:'ab?d' 可以匹配 'abcd' 和 'abxd'。
函数实现
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 j;
for (j = 0; j < needle_len; j++) {
// 如果可选段字符不匹配,则跳出循环
if (needle[j] != '?' && haystack[i+j] != needle[j]) {
break;
}
}
// 如果可选段字符串完全匹配,则返回匹配位置的偏移
if (j == needle_len) {
return i;
}
}
// 如果没有匹配,则返回-1
return -1;
}
使用示例
#include <stdio.h>
int main() {
const char *haystack = 'abcdefg';
const char *needle = 'cde';
int offset = enhanced_strstr(haystack, needle);
if (offset != -1) {
printf('匹配位置的偏移:%d\n', offset);
printf('匹配的字符串:%s\n', haystack + offset);
} else {
printf('未找到匹配的字符串\n');
}
return 0;
}
输出结果
匹配位置的偏移:2
匹配的字符串:cde
代码说明
- 函数
enhanced_strstr接受两个字符串参数:haystack和needle,分别表示源字符串和匹配子字符串。 - 函数首先计算两个字符串的长度,然后使用两层循环进行匹配。
- 外层循环遍历源字符串,内层循环遍历匹配子字符串。
- 在内层循环中,如果匹配子字符串中的字符不是可选段字符
'?',并且源字符串中的字符与匹配子字符串中的字符不相同,则跳出内层循环。 - 如果内层循环能够遍历完匹配子字符串的所有字符,则表示找到了匹配位置,返回匹配位置的偏移量。
- 如果遍历完源字符串的所有字符都没有找到匹配位置,则返回
-1。
注意
上述代码仅为示例,可能还需要进行边界检查和错误处理等其他处理。
原文地址: https://www.cveoy.top/t/topic/cyhk 著作权归作者所有。请勿转载和采集!