首页 > 解决方案 > 字符串匹配多少次

问题描述

我在这里有一个像这样的模式,像*b*这样一个“abcdb”女巫的字符串匹配了两次。

我想计算时间字符串匹配的次数,但我不知道如何用 C 语言实现这一点,因为我只是一个初学者。

是否有任何关于如何在 c 中创建此功能的提示?

标签: cregexpattern-matching

解决方案


对于像这样的简单模式*b*,您可以使用strstr定义在<string.h>

  • 初始化一个const char *p = "abcdb";
  • 每场比赛p = strstr(p, "b");
  • 如果匹配可以重叠,则计算匹配并增加p一,如果不能重叠,则增加模式的长度。
  • 当没有匹配时,你有总计数。

对于更复杂的正则表达式,没有标准函数可以匹配通用模式。您可以尝试安装正则表达式库或编写自己的引擎,这是一项不平凡的任务,至少可以这么说。

这是代码:

#include <string.h>

// works for simplistic patterns without any wildcards
int count_matches(const char *s, const char *pattern) {
    char *p;
    int count = 0;
    for (p = s; (p = strstr(p, pattern)) != NULL; p++)
        count++;
    return count;
}

如果您的系统支持 Posix 文件名模式匹配,您可以使用fnmatch().


推荐阅读