• Viernes 29 de Marzo de 2024, 14:28

Autor Tema:  Separar cadena y contar los bloques  (Leído 2501 veces)

edgarxene2

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Separar cadena y contar los bloques
« en: Lunes 31 de Mayo de 2010, 00:08 »
0
Primero que nada gracias a todos aquellos que se tomen algo de su tiempo para ayudarme.

tengo la siguiente cadena "0100110111010110101" pero bien podria ser cualquiera. lo que necesito es sumar los ceros y unos.

el primer cero vale 1 el siguiente numero ke es el 1 tambien vale 1 lo ke nos da 2 hasta ahora, pero cuando hay ceros juntos
como se muestra en el siguiente valor de la cadena 01000 ..... se deben contar como uno solo igual para los unos.
es decir trabajando con la cadena hasta ahora tendriamos 3 (01000). el siguiente valor (0100) es 11 lo cual se debe tomar como 1 lo que nos daria un resultado hasta el momento de 4 ( [0100110111010110101).

Se que talvez no lo pude explicar de la mejor manera pero para mayor referencia es una parate que se utiliza en el metodo de Coridas arriba corridas abajo.

Nuevamente gracias a todos.

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Separar cadena y contar los bloques
« Respuesta #1 en: Lunes 31 de Mayo de 2010, 15:40 »
0
bueno, si entendí bien lo que preguntas (contar 1 para cada grupo de caracteres iguales )el siguiente codigo podria ayudarte.

Código: C#
  1. string text = Console.ReadLine();       //leemos la entrada
  2.  
  3.            
  4.             char temp = 'a';                        //caracter temporal diferente a cualquier usado
  5.             int numero = 0;
  6.            
  7.             for (int i = 0; i < text.Length; i++)   //bucle con tantas repeticiones como caracteres hemos leido
  8.             {
  9.                 if (temp != text[i])                //si el temporar es distinto entonces:
  10.                 {
  11.                     numero++;                       //sumamos 1
  12.                     temp = text[i];                 //guardamos el char actual para compararlo con el siguiente
  13.                 }
  14.             }
  15.             Console.WriteLine(numero);              // resultado
  16.             Console.ReadKey();
  17.  

Bueno, esta explicado mas o menos lo que hace, si necesitas algo solo avisa. Espero te sirva. Un Saludo.

edgarxene2

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Separar cadena y contar los bloques
« Respuesta #2 en: Martes 1 de Junio de 2010, 02:08 »
0
SI tannke muchas gracias me resuluto para algunas secuencias como: 1100 el resultado debe ser 2 por que se tienen  2 conjuntos pero si pongo esta secuencia: 1110 me da 4 cuando el resultado deberia ser 2.

Pongo mi codigo haber si algo anda mal "Seguro que algo no esta bien"  :D

//Contar los numeros 0
            for (int i = 0; i<tam; i++) //esto recorre mi arreglo donde estan mis numeros 1110
            {
                if (arreglo != 0) //si algun numero de arreglo es diferente de 0
                {
                    h0 = h0 + 1;//se cuentan los numeros diferentes a 0 en este caso serian 1 1 1 (3 numeros)
                }
            }
            h0 = tam - h0;//le resto los numeros encontrados (111) que son 3, al arreglo esto me da 1
            //Contar los numeros 1
            for (int i2 = 0; i2 < tam; i2++)//Buelvo a rrecorrer el arreglo en bosca de numeros diferentes a 1
            {
                if (arreglo[i2] != 1)//si algun numero es diferente de 1
                {
                    h1 = h1 + 1;//he aqui el problemam esto me da como resultado 1 por que tengo un 0 al final (1110)
                }
            }
            h1 = tam - h1;//Cuando realizo la resta del tamaño del arreglo(4) me da 3
            h0=h1+h0; //asi que 3+1 me da 4 cuando la cadena (1110) solo tiene dos grupos el (111) y el (0)
            Console.WriteLine(h0);
bueno lo mismo para 1110 que si fuera 0001
muchas gracias de antemano tannke

Jeysscarr

  • Miembro MUY activo
  • ***
  • Mensajes: 134
  • Nacionalidad: co
    • Ver Perfil
Re: Separar cadena y contar los bloques
« Respuesta #3 en: Martes 1 de Junio de 2010, 02:24 »
0
Resultados con el algoritmo siguiente:

1100 = 2
11111111110111111000000001 = 5
11111111100 = 2
101010101= 9

Código: C#
  1. public int Calcular(string cadena)
  2.         {
  3.             int cont = 0;
  4.             int acum = 0;
  5.             bool repetido = false;
  6.             char anterior = ' ';
  7.  
  8.             foreach (char letra in cadena.ToCharArray())
  9.             {
  10.                 if (cont == 0)
  11.                 {
  12.                     anterior = letra;
  13.                     acum += 1;
  14.                 }
  15.  
  16.                 if (cont != 0 && letra != anterior)
  17.                 {
  18.                     repetido = false;
  19.                     acum += 1;
  20.                 }
  21.                 else
  22.                 {
  23.                     repetido = true;
  24.                 }
  25.  
  26.                 anterior = letra;
  27.                 cont++;
  28.             }
  29.             return acum;
  30.         }
  31.  
Nuestro poder está creciendo mas rápido que nuestra sabiduria

Jeysscarr

  • Miembro MUY activo
  • ***
  • Mensajes: 134
  • Nacionalidad: co
    • Ver Perfil
Re: Separar cadena y contar los bloques
« Respuesta #4 en: Martes 1 de Junio de 2010, 02:31 »
0
puedes usarla asi:
Código: C#
  1.  
  2. Console.Writeline(Calcular("0000101011101"));
  3.  

ó..
Código: C#
  1.  
  2. int numero = 101000101001;
  3. Console.Writeline(Calcular(numero.ToString()));
  4.  
Nuestro poder está creciendo mas rápido que nuestra sabiduria

edgarxene2

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Separar cadena y contar los bloques
« Respuesta #5 en: Martes 1 de Junio de 2010, 03:53 »
0
:o Muchas gracias Jeysscarr funciona a la perfeccion. Te he visto en otros post resolviendo varios problemas,es admirable que le dediques tiempo a personas que ni conoces y que talvez ni te agradescamos la ayuda, Ademas eres muy bueno en lo que haces, nuevamente gracias y espero sigas  siendeo el salvador de muchos. :hola: hasta el siguiente bug o cuando no tenga la mas minima idea (muy comunmente) :D

PD: Aclaro esto no es una carta de amor :D  :D , Simple admiracion

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Separar cadena y contar los bloques
« Respuesta #6 en: Martes 1 de Junio de 2010, 18:23 »
0
Me alegro que lo pudieras solucionar. De todos modos estuve testeando el algoritmo que te pasé antes y a mi no me falla. Te adjunto un jpg con algunas de ellas. Por lo demás aqui estamos para lo que necesites.

Un saludo
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

edgarxene2

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Separar cadena y contar los bloques
« Respuesta #7 en: Martes 1 de Junio de 2010, 23:37 »
0
Si tannke una disculpa talvez en un principio no entendia Bien como hacer lo que me decias pero, ya lo probe y funciona perfectamente fue cosa mia al usar unos arreglos. Muchisimas gracias por tu tiempo bro y por tu acertada ayuda

Jeysscarr

  • Miembro MUY activo
  • ***
  • Mensajes: 134
  • Nacionalidad: co
    • Ver Perfil
Re: Separar cadena y contar los bloques
« Respuesta #8 en: Miércoles 2 de Junio de 2010, 04:20 »
0
Lo que si queda claro es la gran solidaridad!  :beer:
Nuestro poder está creciendo mas rápido que nuestra sabiduria

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Separar cadena y contar los bloques
« Respuesta #9 en: Miércoles 2 de Junio de 2010, 16:39 »
0
Cita de: "Jeysscarr"
Lo que si queda claro es la gran solidaridad!  :beer:

+1 :beer:

Y las multiples maneras que puede haber de resolver un problema.
Un saludo a los dos :)