[C] Función que encuentre patrones

Gnos1s

Hola a todos.

Me gustaría saber si conocéis alguna función en C que, dado una cadena, mire si concuerda con un patrón, por ejemplo:

cadenas: casa, perro, pato, mediavida

Comparar cada cadena con "a", y que diga 1 si concuerda (casa, perro, mediavida) o 0 si no concuerda (perro).

He estado googleando pero sólo me salen expresiones regulares. Ya existe algo parecido para nombres de archivos, mediante la función glob().

JuAn4k4

Con las expresiones regulares puedes hacerlo pero no es la mejor manera.

Subsequence o Subcadena, busca por ahi.

Es un problema muy comun, y muy estudiado, ya que el estudio de cadenas de adn se basa precisamente en eso. Hay muchisima teoria por ahi.

Existir funcion en si creo que no existe, pero aqui en MV se han desarrollado, busca por el foro, que los hay son viejunos, yo recuerdo que hice uno en un tema y abri otro muy parecido "Arbol Patricia" se llamaba, pero no consegui hacerlo con esa estructura, el otro tema del que te hablo es de la misma fecha.

Bocasucia

de lo poco que recuerdo de una asignatura que hice de la carrera había algoritmos como Horspool, BNDM, BOM, SBOM.
No se, supongo que googleando encontrarás info sobre ellos

NeB1

expresiones regulares, no hay más.

Gnos1s

El tema de hacerlo a mano no es problema ya que me ha tocado hacerlo en alguna práctica anterior rollo autómata, aunque luego hice uso de LEX, y menudo cambio.

Es por simplificar bastante, porque claro, para aquellas prácticas la "función" teníamos que hacerla nosotros mismos, y no se podía recurrir a ninguna librería, por eso ni me planteé si existía alguna. En cambio ahora he dicho "joder, ¿y si hay alguna que lo simplifique?". Me veo haciéndolo a mano de nuevo. Seguramente lo haré de forma recursiva y fuera.

De todos modos, esperaré por si alguno conoce una función que pueda facilitarme las cosas.

NeB1

aps, sorry, entonces lo que buscas era una libreria que se llamaba... Libpcre

http://www.todo-linux.com/modules.php?name=News&file=article&sid=2602

En esta web te lo explican.

Gnos1s

Le eché un vistazo navegando, pero no estoy seguro si aceptarán eso. Ya os diré qué me dice el profesor como solución.

He encontrado esta página, que seguramente algún apaño pueda hacer con ese código y pasarle el patrón "a mano", viendo la cadena y sustituyéndola por una expresión regular como pattern.

Gnos1s

Al final tocó usar regex (regex.h).

NeB1

al final si que te ha tocado usar expresiones regulares jejeje, es que si nos era casi imposible...

Gnos1s

Bueno, era tan simple como coger, pasarle a la función la expresión regular y la cadena que pueda coincidir, que es lo que yo quería, así que bueno, bastante directo.

Usuarios habituales

  • Gnos1s
  • NeB1
  • Bocasucia
  • JuAn4k4