字符串匹配多少次

时间:2018-07-29 12:43:10

标签: c regex pattern-matching

*b*,我有一个这样的模式,而一个像这样的字符串“ abcdb”则匹配两次。

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

关于如何在c中实现此功能,是否有任何提示?

2 个答案:

答案 0 :(得分:0)

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

  • 初始化const char *p = "abcdb";
  • 每次比赛p = strstr(p, "b");
  • 计算匹配项,如果匹配项可以重叠,则p加1;如果不能重叠,则增加模式长度。
  • 没有匹配项时,您就有总数。

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

代码如下:

#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()

答案 1 :(得分:0)

int result = 0;
char* pattern  = strdup("b");
char* mystr = strdup("abcdb");

if(strlen(pattern) <= strlen(mystr))
    size_t i;
    for(i = 0; i <= strlen(mystr) - strlen(pattern); i++){
        if(strncmp(pattern, mystr + i, strlen(pattern)) == 0){
            result += 1;
        }
    }
}

free(pattern);
free(mystr);
printf("%d\n", result);

return result;

别忘了#include <string.h>#include <stdio.h>