// gcc -std=c99
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
static int
count_substr(const char *str, const char* substr, bool overlap) {
if (strlen(substr
) == 0) return -1;
int count = 0;
int increment
= overlap
? 1 : strlen(substr
); for (char* s
= (char*)str
; (s
= strstr(s
, substr
)); s
+= increment
) ++count;
return count;
}
int main() {
char *substrs[] = {"a", "aa", "aaa", "b", "", NULL };
for (char** s = substrs; *s != NULL; ++s)
printf("'%s' -> %d, no overlap: %d\n", *s
, count_substr
("aaaaa", *s
, true), count_substr("aaaaa", *s, false));
}
Ly8gZ2NjIC1zdGQ9Yzk5CiNpbmNsdWRlIDxzdGRib29sLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgpzdGF0aWMgaW50CmNvdW50X3N1YnN0cihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIqIHN1YnN0ciwgYm9vbCBvdmVybGFwKSB7CiAgaWYgKHN0cmxlbihzdWJzdHIpID09IDApIHJldHVybiAtMTsKCiAgaW50IGNvdW50ID0gMDsKICBpbnQgaW5jcmVtZW50ID0gb3ZlcmxhcCA/IDEgOiBzdHJsZW4oc3Vic3RyKTsKICBmb3IgKGNoYXIqIHMgPSAoY2hhciopc3RyOyAocyA9IHN0cnN0cihzLCBzdWJzdHIpKTsgcyArPSBpbmNyZW1lbnQpCiAgICArK2NvdW50OwogIHJldHVybiBjb3VudDsKfQoKaW50IG1haW4oKSB7CiAgY2hhciAqc3Vic3Ryc1tdID0geyJhIiwgImFhIiwgImFhYSIsICJiIiwgIiIsIE5VTEwgfTsKCiAgZm9yIChjaGFyKiogcyA9IHN1YnN0cnM7ICpzICE9IE5VTEw7ICsrcykKICAgIHByaW50ZigiJyVzJyAtPiAgJWQsIG5vIG92ZXJsYXA6ICVkXG4iLCAqcywgY291bnRfc3Vic3RyKCJhYWFhYSIsICpzLCB0cnVlKSwKCSAgIGNvdW50X3N1YnN0cigiYWFhYWEiLCAqcywgZmFsc2UpKTsKfQo=