martes, 25 de octubre de 2011


En este post veremos como saber en C# si una palabra contiene una subcadena dada. Por ejemplo, “puntopeek” contiene la subcadena “peek”? Para solucionar este problema, seguiremos la siguiente idea:

Algoritmo

1. Buscamos los dos primeros caracteres que coincidan 2. A partir de esa posicion recorremos la palabra hasta ver si coincide completamente 3. Si no coinciden, volvemos al paso 1

Código en C#

public static bool Contiene(string palabra, string cadena) {  for (int i = 0; i <= palabra.Length-cadena.Length; i++)   //Si encontramos dos letras iguales   if(palabra[i]==cadena[0])   {    bool contenida = true;    //Recorremos la cadena desde la posición 1    //y comparamos con la palabra a partir de     //la posición donde las dos letras iguales    for (int j = 1; j < cadena.Length; j++)     if (palabra[i + j] != cadena[j])      contenida = false;    //Si esta contenida    if(contenida)      return true;   }  //Si no está contenida  return false; }

Notas

Es importante notar que aunque String, es una clase en C#, se puede tratar como un array de caracteres, y que el for se hace hasta palabra.Length-subcadena.Length, para que no de excepción. Si quieres saber más sobre este tema, puedes ver un post que escribí hace un tiempo sobre la clase String en C#. También hay que decir que este ejercicio se puede hacer de otra forma más eficiente usando String Matching y algoritmos como KMP, pero no es el objetivo de este post.

Creo que el código está bien comentado, pero cualquier pregunta en los comentarios.

Descargar Ejemplo

Puedes descargar este y otros ejemplos de string usando C#

0 comentarios:

Publicar un comentario