CLR: .Net / Mono / Boo / Otros CLR > C#

 Separar cadena y contar los bloques

(1/2) > >>

edgarxene2:
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:
bueno, si entendí bien lo que preguntas (contar 1 para cada grupo de caracteres iguales )el siguiente codigo podria ayudarte.


--- Código: C# ---string text = Console.ReadLine();       //leemos la entrada                         char temp = 'a';                        //caracter temporal diferente a cualquier usado            int numero = 0;                        for (int i = 0; i < text.Length; i++)   //bucle con tantas repeticiones como caracteres hemos leido            {                if (temp != text[i])                //si el temporar es distinto entonces:                {                     numero++;                       //sumamos 1                    temp = text[i];                 //guardamos el char actual para compararlo con el siguiente                }            }            Console.WriteLine(numero);              // resultado            Console.ReadKey(); 
Bueno, esta explicado mas o menos lo que hace, si necesitas algo solo avisa. Espero te sirva. Un Saludo.

edgarxene2:
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:
Resultados con el algoritmo siguiente:

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


--- Código: C# ---public int Calcular(string cadena)        {            int cont = 0;            int acum = 0;            bool repetido = false;            char anterior = ' ';             foreach (char letra in cadena.ToCharArray())            {                if (cont == 0)                {                    anterior = letra;                    acum += 1;                }                 if (cont != 0 && letra != anterior)                {                    repetido = false;                    acum += 1;                }                else                {                    repetido = true;                }                 anterior = letra;                cont++;            }            return acum;        } 

Jeysscarr:
puedes usarla asi:

--- Código: C# --- Console.Writeline(Calcular("0000101011101")); 
ó..

--- Código: C# --- int numero = 101000101001;Console.Writeline(Calcular(numero.ToString())); 

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa