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 接受两个字符串参数:haystackneedle,分别表示源字符串和匹配子字符串。
  • 函数首先计算两个字符串的长度,然后使用两层循环进行匹配。
  • 外层循环遍历源字符串,内层循环遍历匹配子字符串。
  • 在内层循环中,如果匹配子字符串中的字符不是可选段字符 '?',并且源字符串中的字符与匹配子字符串中的字符不相同,则跳出内层循环。
  • 如果内层循环能够遍历完匹配子字符串的所有字符,则表示找到了匹配位置,返回匹配位置的偏移量。
  • 如果遍历完源字符串的所有字符都没有找到匹配位置,则返回 -1

注意

上述代码仅为示例,可能还需要进行边界检查和错误处理等其他处理。

C语言实现strstr增强函数:支持模糊查询

原文地址: https://www.cveoy.top/t/topic/cyhk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录