Identificar subcadenas en C#

Oct 4, 2011 Codigos C# 10 comentarios

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#

Compartir:

10 comentarios

Forma parte de nuestra discusión y síguela de cerca

[...] Fuente:aquí Categoria(s): .NET, C#Tags: c#, string, subcadena Menús en XML para Android [...]

Autor: Identificar subcadenas | Informática, programación, noticias, tecnología … | Fecha: Oct 10, 2011.

genial tu blog!! necesito resolver problemas más problemás .. me fue mal en un test …

Autor: writkas | Fecha: Oct 19, 2011.

como crítica -constructiva-.
podrías poner en el título “problema: este es el problema”
con una estructura del post parecida –>

Problema: el problema es este

Solución

algoritmo
1..
2…
3 ..

Código:
printf(“ss”);

Saludos

Autor: writkas | Fecha: Oct 19, 2011.

@writkas: tienes razón, trabajaré en eso… necesito organizar las cosas un poco más ;)

Autor: Tom | Fecha: Oct 20, 2011.

Otra forma es usar palabra.IndexOf(“peek”), devuelve -1 si no encuentra la sub cadena deseada. Ignoro qué tan eficiente es este método, pero para cadenas pequeñas, de unas cuantas decenas de palabras de longitud, es buena idea usarlo.

Autor: yelinna | Fecha: Oct 27, 2011.

hola de nuevo :D

una consulta pequeña. ¿Cuál crees que es la mejor forma de llamar a los array, simplemente array o vector para los array unidimencionales y matriz para los array con dos dimenciones?

No se si me puedes responder :-/ saludos

Autor: writkas | Fecha: Nov 2, 2011.

Buen aporte…

Autor: Ricardo | Fecha: Nov 7, 2011.

@yelinna, gracias por el aporte, nunca había usado ese método con string o.O, pero igual el código es más didáctico que otra cosa

@writkas, mi profesor (Dr. Miguel Katrib) siempre dice que los arrays son arrays, no vectores (esa palabra está mas asociada al álgebra) y los arrays de dos dimensiones son llamados matriz, y los de más de dos dimensiones creo que se llaman multiarray (pero no estoy seguro)

Autor: Tomy | Fecha: Abr 12, 2012.

Excelente tu blog, muy util y bien organizado, saludos.

Autor: CDFlik | Fecha: Jun 15, 2012.

Pueden usar la expresion
if(cadena.Contains(stringToCompare))
{

}

Es muy simple

Autor: LogSys | Fecha: Ene 16, 2016.

Escribe tu comentario

Requerido.

Requerido. No público.

Si tienes alguno.