typestar

Búsqueda de subcadenas a mano en C

El escaneo ingenuo, escrito completo, porque el punto es conocer su costo.

long find_substring(const char *text, const char *pattern) {
    size_t n = strlen(text);
    size_t m = strlen(pattern);
    if (m == 0) {
        return 0;
    }
    for (size_t start = 0; m <= n && start + m <= n; start++) {
        size_t i = 0;
        while (i < m && text[start + i] == pattern[i]) {
            i++;
        }
        if (i == m) {
            return (long) start;
        }
    }
    return -1;
}

Cómo funciona

  1. Cada posición inicial se prueba por turno.
  2. El peor caso es el largo del patrón por el largo del texto.
  3. Acotar el bucle externo evita leer más allá del final.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
17
Caracteres a escribir
321
Tokens
118
Ritmo de tres estrellas
100 tpm

Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 71 segundos.

Escribe este fragmento

Paso 3 de 3 en Comparar y buscar; paso 7 de 13 en Cadenas y texto.

← Anterior Siguiente →