jueves, marzo 08, 2007

C# .NET: Funciones de matching de cadenas - String matching methods

Aquí incluyo tres filtros de matching, uno que compara el principio de la palabra, otro el final y otro tanto el principio como el final.
Es un buen ejemplo de cómo se interactúa entre string y char[] cuando necesitamos implementar operaciones con cadenas a un nivel más bajo.

//primer filtro de matching mas fuerte (principio y final de la palabra)
public bool match1(string s1, string s2)
{
//haremos el matching de una sola letra si alguna palabra es <2
if (
s1.Length "<" 2 || s2.Length "<" 2)
{
char[] p1 = s1.ToCharArray();
char[] p2 = s2.ToCharArray();
//comprobamos
if (p1[0] == p2[0] && p1[s1.Length - 1] == p2[s2.Length - 1])
{
return true;
}
return false;
}
//haremos el matching con dos letras
else
{
char[] p1 = s1.ToCharArray();
char[] p2 = s2.ToCharArray();
//comprobamos
if (p1[0] == p2[0] &&amp; p1[1] == p2[1] &&
p1[s1.Length - 1] == p2[s2.Length - 1] && p1[s1.Length - 2] == p2[s2.Length - 2])
{
return true;
}
return false;
}
}

//segundo filtro de matching mas leve (principio de la palabra)
public bool match2(string s1, string s2)
{
//haremos el matching de una sola letra
if (
s1.Length "<" 2 || s2.Length "<" 2)
{
char[] p1 = s1.ToCharArray();
char[] p2 = s2.ToCharArray();
//comprobamos
if (p1[0] == p2[0])
{
return true;
}
return false;
}
//haremos el matching con dos letras
else
{
char[] p1 = s1.ToCharArray();
char[] p2 = s2.ToCharArray();
//comprobamos
if (p1[0] == p2[0] && p1[1] == p2[1])
{
return true;
}
return false;
}
}

//tercer filtro de matching mas leve (final de la palabra)
public bool match3(string s1, string s2)
{
//haremos el matching de una sola letra

if
(
s1.Length "<" 2 || s2.Length "<" 2)
{
char[] p1 = s1.ToCharArray();
char[] p2 = s2.ToCharArray();
//comprobamos
if (p1[0] == p2[0])
{
return true;
}
return false;
}
//haremos el matching con dos letras
else
{
char[] p1 = s1.ToCharArray();
char[] p2 = s2.ToCharArray();
int l1 = s1.Length;
int l2 = s2.Length;
//comprobamos
if (p1[l1 - 1] == p2[l2 - 1] && p1[l1 - 2] == p2[l2 - 2])
{
return true;
}
return false;
}
}

NOTA: en las partes sombreadas en color gris cambiar los "<" por < (problemas con el html :-( ).

1 comentario:

mpi dijo...

Puedes utilizar &lt; para el «menor que» y &gt; para el «mayor que». También puedes usar la etiqueta <pre>:

if (s1.Length &lt; 2) ...

o bien

<pre>
if (s1.Length < 2) ...
</pre>

El <pre> es mejor para poner código fuente porque así no tienes que poner <br /> a tutiplén, pones el código tal cual lo tienes. Es como una especie de verbatim si has usado LaTeX.