C语言实现字符串模糊查询(子串匹配)

Ryan
Ryan
发布时间:2026-10-13| 4人浏览过
原创

在C语言开发中,模糊查询通常指检测目标字符串是否包含特定的子串序列。相比于正则表达式等高级方案,基于标准库函数 memchr 和 memcmp 的组合不仅能高效完成此任务,还能清晰展示底层内存比较的运作机制。

核心方法与原理

实现该功能的关键在于两步操作:

  1. 快速定位起点:使用 memchr() 扫描目标字符串,寻找子串的第一个字符。如果找不到该首字符,则整个子串必然不存在。
  2. 精确匹配片段:一旦找到可能的起点,立即使用 memcmp() 从该位置开始,按子串的长度逐一比对后续的字符。

第1步:环境准备与输入定义

首先引入必要的头文件,并构建输入缓冲区。需要注意 fgets() 会保留换行符,因此实际参与比对的有效长度需要扣除换行位。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(int argc, const char * argv[])
{
  char str[] = "hello welcome to china\0"; //源字符串
  printf("input a string:\n");       
  char str2[20];              //要查找的字符串
  fgets(str2, 19, stdin);     //读取输入

第2步:初步搜索与异常拦截

提取用户输入的首个字符,并在主串中进行首次查找。若返回值为NULL,说明连开头都没有,直接结束程序。

  char *res;
  res = memchr(str, str2[0], strlen(str));  //根据要查找的字符串第一个字符,切割源字符串
  if (res == NULL)
  {
    printf("find nothing...\n");
    return 0;
  }

第3步:循环比对与边界处理

进入死循环持续比对。在此处必须处理两种情况:
1. 完全匹配成功,即 memcmp 返回0。
2. 当前位置不足以为子串提供剩余空间,需将指针后移一位,继续向下尝试。

  int n;
  while (1)
  {
    n = memcmp(res, str2, strlen(str2) - 1); //比较
    if (n != 0)
    {
      if (strlen(res) <= strlen(str2))  //切割出的字符串小于要查找字符串的长度
      {
        printf("find nothing...\n");
        return 0;
      }
      else
      {  
       //根据要查找的第一个字符继续切割
        res = memchr(res + 1, str2[0], strlen(res));  
        if (res == NULL)
        {
          printf("find nothing...\n");
          return 0;
        }
         
      }
    }
    else
    { //如果n = 0,找到
      printf("%s is found..\n", str2);
      return 0;
    }
  }
}

总结

上述代码展示了如何利用 C语言 原生接口构建最基础的字符串模糊查询逻辑。通过先锁定关键点再逐字节校验的策略,既保证了效率也明确了执行流程。

以上就是C语言之字符串模糊查询方法的实现的详细内容,更多关于C语言基础编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。