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
- Cada posición inicial se prueba por turno.
- El peor caso es el largo del patrón por el largo del texto.
- Acotar el bucle externo evita leer más allá del final.
Palabras clave y builtins usados aquí
charconstforiflongreturnsize_twhile
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.
Paso 3 de 3 en Comparar y buscar; paso 7 de 13 en Cadenas y texto.