SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: edgarxene2 en Lunes 31 de Mayo de 2010, 00:08

Título: Separar cadena y contar los bloques
Publicado por: edgarxene2 en Lunes 31 de Mayo de 2010, 00:08
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.
Título: Re: Separar cadena y contar los bloques
Publicado por: tannke en Lunes 31 de Mayo de 2010, 15:40
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.
Título: Re: Separar cadena y contar los bloques
Publicado por: edgarxene2 en Martes 1 de Junio de 2010, 02:08
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
Título: Re: Separar cadena y contar los bloques
Publicado por: Jeysscarr en Martes 1 de Junio de 2010, 02:24
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.  
Título: Re: Separar cadena y contar los bloques
Publicado por: Jeysscarr en Martes 1 de Junio de 2010, 02:31
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.  
Título: Re: Separar cadena y contar los bloques
Publicado por: edgarxene2 en Martes 1 de Junio de 2010, 03:53
: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
Título: Re: Separar cadena y contar los bloques
Publicado por: tannke en Martes 1 de Junio de 2010, 18:23
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
Título: Re: Separar cadena y contar los bloques
Publicado por: edgarxene2 en Martes 1 de Junio de 2010, 23:37
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
Título: Re: Separar cadena y contar los bloques
Publicado por: Jeysscarr en Miércoles 2 de Junio de 2010, 04:20
Lo que si queda claro es la gran solidaridad!  :beer:
Título: Re: Separar cadena y contar los bloques
Publicado por: tannke en Miércoles 2 de Junio de 2010, 16:39
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 :)