void
example_search()
{
    /* search string via Boyer Moore algorithm */
    char *s = "this is a simple example";
    char *sub = "mp";
    size_t first_idx = strings_search(s, sub, 0);
    size_t second_idx = strings_search(s, sub, first_idx + 1);
    printf("'%s' is seen in '%s' at index %zu\n", sub, s, first_idx);
    printf("'%s' is seen in '%s' again at index %zu\n", sub, s, second_idx);
}
Beispiel #2
0
void
case_strings_search(struct bench_ctx *ctx)
{
    /* suite */
    int i;
    char strs[ctx->n][32];
    char subs[ctx->n][4];
    for (i = 0; i < ctx->n; i++) {
        sprintf(strs[i], "%d", i);
        sprintf(subs[i], "%d", i & 999);
    }
    /* bench */
    bench_ctx_reset_start_at(ctx);
    for (i = 0; i < ctx->n; i++) {
        strings_search(strs[i], subs[i], 0);
    }
    bench_ctx_reset_end_at(ctx);
}
Beispiel #3
0
/* Replace all `sub` in string `src` with `rep` and concat the
 * result into `dst`. All the arguments are NULL-terminated c
 * string, return  */
char *strings_replace(char *dst, char *src, char *sub, char *rep) {
    size_t src_len = strlen(src);
    size_t sub_len = strlen(sub);
    size_t rep_len = strlen(rep);
    size_t dst_len = 0;
    size_t idx, start = 0;

    while ((idx = strings_search(src, sub, start)) < src_len) {
        strncat(dst + dst_len, src + start, idx - start);
        dst_len += idx - start;
        strcat(dst + dst_len, rep);
        dst_len += rep_len;
        start = idx + sub_len;
    }
    strcat(dst + dst_len, src + start);
    dst_len += src_len - start;
    dst[dst_len] = '\0';
    return dst;
}