Foros del Web » Programación para mayores de 30 ;) » .NET »

Número de apariciones en un String C#

Estas en el tema de Número de apariciones en un String C# en el foro de .NET en Foros del Web. En algunos otros lenguajes he podido contar cuántas veces aparece un caracter o algún patrón dentro de un String, pero en C# no he logrado ...
  #1 (permalink)  
Antiguo 25/10/2010, 13:50
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 14 años, 7 meses
Puntos: 3
Sonrisa Número de apariciones en un String C#

En algunos otros lenguajes he podido contar cuántas veces aparece un caracter o algún patrón dentro de un String, pero en C# no he logrado hallar alguna función automática. Algo así:

Código C#:
Ver original
  1. String cadena="Hola ¿cómo estas?";
  2. int ocurrencias, ocurrencias2=0;
  3. ocurrencias=cadena.Occurs('a'); //para lo cual, ocurrencias debería tener el valor 2
  4. ocurrencias2=cadena.Occurs("es");//ésta variable debe tener como valor 1

Obviamente la función Occurs no existe en este lenguaje, lo cual sería perfecto que así lo sea tal como este ejemplo. Sé que hay forma de hacerlo uno mismo y es sencillo, lo sé, pero si alguien sabe cómo invocar una función ya predefinida como las que existen (substring, length, etc.) se lo agradecería. Gracias

Última edición por pancho2413; 25/10/2010 a las 13:57
  #2 (permalink)  
Antiguo 25/10/2010, 14:14
 
Fecha de Ingreso: febrero-2010
Ubicación: México
Mensajes: 738
Antigüedad: 14 años, 2 meses
Puntos: 37
Respuesta: Número de apariciones en un String C#

Lo mas parecido que veo a lo que comentas es con Cadena.Contains("LaCadena"); y te regresa un bool.

Saludos!
__________________
http://ka0stj.wordpress.com/
  #3 (permalink)  
Antiguo 25/10/2010, 17:02
 
Fecha de Ingreso: octubre-2010
Ubicación: Cordoba, Argentina
Mensajes: 40
Antigüedad: 13 años, 6 meses
Puntos: 2
Respuesta: Número de apariciones en un String C#

no se que version estas usando de framework, pero con linq(creo que esta a partir del 3) podes hacer asi

Cita:
long b = "hola como estas".LongCount(letra=> letra.ToString() == "a");
Resultado: b=2
Saludos
  #4 (permalink)  
Antiguo 27/10/2010, 15:08
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Número de apariciones en un String C#

Cita:
Iniciado por ramiroli Ver Mensaje
no se que version estas usando de framework, pero con linq(creo que esta a partir del 3) podes hacer asi


Resultado: b=2
Saludos
Leyendo esto tengo ENTONCES otro problema ¿Qué es eso de linq y cómo utilizarlo para que el ejemplo que me diste funcione?

Muchas gracias. Por cierto, a versión de mi framework es 3.5 SP1
  #5 (permalink)  
Antiguo 27/10/2010, 15:20
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Número de apariciones en un String C#

Cita:
Iniciado por Ka0stj Ver Mensaje
Lo mas parecido que veo a lo que comentas es con Cadena.Contains("LaCadena"); y te regresa un bool.

Saludos!
El problema con esta función es que no me dice el número de veces que lo contiene pero gracias

quisiera que en lugar de escribir algo como:

Código C#:
Ver original
  1. //PRIMERA PARTE: ASIGNACIÓN DE LA CADENA
  2. String cadena="Hola ¿Cómo estás?";
  3. //SEGUNDA PARTE: RUTINA DE CONTEO DEL PATRÓN
  4. int contador, posicion=0;
  5. String patron="o";
  6. for (int i=0; i<cadena.length;i++)
  7. {
  8.     posicion=cadena.IndexOf(patron);
  9.     if (posicion!=-1)
  10.         {
  11.             contador++;
  12.             cadena=cadena.Substring(posicion+patron.Length);
  13.         }
  14. }
  15. //TERCERA PARTE: MOSTRAR EL RESULTADO
  16. MessageBox.Show("El patrón se repite "+contador+" veces en la cadena");


escribir solamente:
Código C#:
Ver original
  1. //PRIMERA PARTE: ASIGNACIÓN DE LA CADENA
  2. String cadena="Hola ¿Cómo estás?";
  3. //SEGUNDA PARTE: FUNCIÓN AUTOMÁTICA YA PREDEFINIDA DE CONTEO
  4. //Y QUE POR EJEMPLO SE LLAME 'Occurs'
  5. int contador = cadena.Occurs('o');
  6. //TERCERA PARTE: MOSTRAR EL RESULTADO
  7. MessageBox.Show("El patrón se repite "+contador+" veces en la cadena");
  #6 (permalink)  
Antiguo 27/10/2010, 15:28
Avatar de gedarufi  
Fecha de Ingreso: diciembre-2008
Ubicación: Colombia
Mensajes: 540
Antigüedad: 15 años, 5 meses
Puntos: 22
Respuesta: Número de apariciones en un String C#

Prueba con esto

Código C#:
Ver original
  1. String cadena = "Hola ¿cómo estas?";
  2. int ocurrencias, ocurrencias2 = 0;
  3. ocurrencias = cadena.Split('a').Length - 1; //para lo cual, ocurrencias debería tener el valor 2
  4. ocurrencias2 = cadena.Split(new String[]{ "es"}, StringSplitOptions.None).Length - 1;//ésta variable debe tener como valor 1
  #7 (permalink)  
Antiguo 27/10/2010, 16:26
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Número de apariciones en un String C#

Cita:
Iniciado por gedarufi Ver Mensaje
Prueba con esto

Código C#:
Ver original
  1. String cadena = "Hola ¿cómo estas?";
  2. int ocurrencias, ocurrencias2 = 0;
  3. ocurrencias = cadena.Split('a').Length - 1; //para lo cual, ocurrencias debería tener el valor 2
  4. ocurrencias2 = cadena.Split(new String[]{ "es"}, StringSplitOptions.None).Length - 1;//ésta variable debe tener como valor 1
Buena respuesta.

Claro está que hay que probar la velocidad de esto versus la rutina que planteé, pues Split primero divide la cadena en varias subcadenas y lo que hacemos es contar cuántas subcadenas hay después. Por lo pronto te daré preferencia

Gracias
  #8 (permalink)  
Antiguo 27/10/2010, 16:30
Avatar de gedarufi  
Fecha de Ingreso: diciembre-2008
Ubicación: Colombia
Mensajes: 540
Antigüedad: 15 años, 5 meses
Puntos: 22
Respuesta: Número de apariciones en un String C#

Has la prueba de rendimiento y nos cuentas, al código anterior hay que agregarle una validación en el caso de que no se encuentre ninguna instancia del criterio de busqueda.

Saludos
  #9 (permalink)  
Antiguo 28/10/2010, 11:02
 
Fecha de Ingreso: octubre-2010
Ubicación: Cordoba, Argentina
Mensajes: 40
Antigüedad: 13 años, 6 meses
Puntos: 2
Respuesta: Número de apariciones en un String C#

Cita:
Iniciado por pancho2413 Ver Mensaje
Leyendo esto tengo ENTONCES otro problema ¿Qué es eso de linq y cómo utilizarlo para que el ejemplo que me diste funcione?

Muchas gracias. Por cierto, a versión de mi framework es 3.5 SP1
Solamente tenes que usar la libreria System.linq.
Saludos
  #10 (permalink)  
Antiguo 28/10/2010, 15:22
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Número de apariciones en un String C#

He hallado una pequeña forma haciendo pruebas de velocidad entre varias formas planteadas y son las siguientes:
Código C#:
Ver original
  1. int cont = cadena.Split(new String[] { patron }, StringSplitOptions.None).Count() - 1;
  2. int cont2 = cadena.Length - cadena.Replace(patron, " ").Length;
  3. // reemplazo con " " porque 'patrón' tiene 2 caracteres.
  4. // Si fuese uno solo, lo reemplazaría con ""

Dos aclaraciones: Mi pequeña rutina definitivamente la deseché por ser lenta. La sugerencia de ramiroli la agradezco pero resultó que también tuve que desecharla por ser no rápida tampoco.

Bueno, la conclusión es la siguiente: usando una cadena de longitud 4 320 000,

La primera encuentra 1 600 000 repeticiones de un patrón en 2 segundos.
La segunda entruentra 1 600 000 repeticiones en menos de 1 segundo.

Así que la segunda que encontré es la más rápida de todas las formas que he podido hallar. Gracias a todos. Les agradezco y me siento feliz de haber terminado con esto.

Etiquetas: ocurrencias, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:58.