在*b*
,我有一个这样的模式,而一个像这样的字符串“ abcdb”则匹配两次。
我想计算时间字符串匹配的次数,但是由于我只是一个初学者,所以我不知道如何用C语言实现这一点。
关于如何在c中实现此功能,是否有任何提示?
答案 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>