none
Como dividir un entero en digitos

    Question

  • Hola

    Lo que me pasa es lo siguiente tengo una App en c# 2010 en la cual tengo un textbox en el cual se va a introducir una cedula de identidad la cual tiene 11 dígitos.

    Mi app tiene que verificar si la cedula existe y para esto tengo que usar el algoritmo del módulo 11 pero este algoritmo trabaja con cada uno de los dígitos individualmente ósea no con un entero de 11 dígitos si no con un digito a la vez.

    Lo que quiero es saber cómo puedo dividir ese string que me pasaran en un textbox convertirlo en int y almacenarlos en un arreglo.

    Quiero algo como esto:

    int[] numeros = new int[11];

    Pasarle este número al textbox 22300855543 y que él se divida cada uno de esos dígitos se almacene en una posición del arreglo anterior-.

    Es esto posible.


    • Edited by Ovegeton Sunday, May 08, 2011 8:19 AM cosas
    Sunday, May 08, 2011 8:19 AM

Answers

  • hola

    lo que Alberto comenta que es un string puede ser considerado un array de char, pero esto es natural y puedes tomar cada cartacter

    lo que te esta faltando es la conversion

    puedes hacer

    TextBox1.Text = "22334345542";

    string variable = TextBox1.Text

    int a = Convert.ToInt32(variable[0]);

    como veras en este caso en la variable "a" tendras el valor 2

     

    y puede hacer un foreach

    foreach(char item in variable){

       int a = Convert.ToInt32(item);

       //aqui operas con ese valor

    }

     

    o si lo quieres en una linea

    string variable = TextBox1.Text

    int[] items = variable.ToCharArray().ToList().ConvertAll(o => Convert.ToInt32(o)).ToArray();

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Ovegeton Sunday, May 08, 2011 3:53 PM
    Sunday, May 08, 2011 2:33 PM
  • Gracias a todo el que intento ayudarme.

    Ya resolvi el dilema y fue de esta forma.

    //Esta variable cuenta para saber en que posición se encuentra el arreglo.
    int cont = 0;
    
    //Esta variable obtiene el valor en este caso la cedula del usuario
    string cedula = Console.ReadLine();
    
    //Esto divide las palabras con el split recorriendo carácter por carácter
    string[] arregloDeString = cedula.Split(new char[] { ' ' });
    
    //Este arreglo se encargara de contener los dígitos ya divididos
    int[] digitos = new int[11];
    
    //Este bucle recorrera el string que contiene la cedula para pasárselo al arreglo en forma de entero 
    //ósea pasarlo de char a int.
          foreach (char caracter in cedula)
          {
            for (int i = 0; i < digitos.Length; i++)
            {
              if (i==cont)
              {
                digitos[i] = Int32.Parse(caracter.ToString());
                cont++;
                break;
              }          
            }        
          }
    

    Esto fue lo que se me ocurrio.

    Y me funciono.

    • Marked as answer by Ovegeton Sunday, May 08, 2011 2:47 PM
    Sunday, May 08, 2011 2:47 PM

All replies

  • Bueno, el textbox ya te devuelve un string. Es una tontería convertirlo a entero para luego volverlo a convertir en string y separar los dígitos. Y la clase String ya contiene un indexador que permite tratarla como un array de caracteres, por lo que no se necesita copiarlos a un array. En resumidas cuentas, no tienes que hacer nada:

    string digitos = TextBox1.Text.

    string digito 1 = digitos[0];

    string digito 2 = digitos[1];

    etc.

     

    Sunday, May 08, 2011 9:19 AM
  • Osease, talvez,

    0x32 0x32 0x33 0x30 0x30 0x38 ...

    para luego obtener el resto de la división por 11 de cada uno.

    Confirma. Sino no tiene sentido continuar.

    Sunday, May 08, 2011 1:56 PM
  • Hola

    Alberto Poblacion no entiendo como hacer eso que dices mira lo que quiero.

    TextBox1.Text = "22334345542";

    Cuando yo le pase eso al textbox se dividan en digitos enteros osea cada uno esten individuales pero sean de tipo int.

    Porque necesito hacer una operacion con cada digito individual pero en realidad el usuario me va a pasar un numero entero.

    Lo que quiero es para ver si me entienden es algo asi.

    Llebar de esto

    string variable = "22344342251"

    a esto

    int a = 2;

    int a = 2;

    int a = 3;

    etc.

    no es importante donde se alogen, si es en variables o en posiciones de un arreglo el punto es que pasen de una cadena de string a digitos de tipo int.

    Sunday, May 08, 2011 2:24 PM
  • hola

    lo que Alberto comenta que es un string puede ser considerado un array de char, pero esto es natural y puedes tomar cada cartacter

    lo que te esta faltando es la conversion

    puedes hacer

    TextBox1.Text = "22334345542";

    string variable = TextBox1.Text

    int a = Convert.ToInt32(variable[0]);

    como veras en este caso en la variable "a" tendras el valor 2

     

    y puede hacer un foreach

    foreach(char item in variable){

       int a = Convert.ToInt32(item);

       //aqui operas con ese valor

    }

     

    o si lo quieres en una linea

    string variable = TextBox1.Text

    int[] items = variable.ToCharArray().ToList().ConvertAll(o => Convert.ToInt32(o)).ToArray();

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Ovegeton Sunday, May 08, 2011 3:53 PM
    Sunday, May 08, 2011 2:33 PM
  • Bueno, pues usa un bucle:

    TextBox1.Text = "22334345542";
    string texto = TextBox1.Text;
    int[] digitos = new int[texto.Length];
    for (int i=0; i<texto.Length; i++)
    {
      digitos[i] = int.Parse(texto.SubString(i,1));
    }
    //Aquí tienes todos los ints en el array "digitos".
    

     

    Sunday, May 08, 2011 2:34 PM
  • Ah, entonces quieres digamos sumar todos los dígitos y a esa suma aplicarle el módulo 11. No el módulo de cada dígito. Yo me fuí por el lado del charcode porque sino el modulo de 2 es 2, y el de 9 es 9. No tenía sentido.

    Ok, ya te han indicado como se hace...

    Sunday, May 08, 2011 2:42 PM
  • Gracias a todo el que intento ayudarme.

    Ya resolvi el dilema y fue de esta forma.

    //Esta variable cuenta para saber en que posición se encuentra el arreglo.
    int cont = 0;
    
    //Esta variable obtiene el valor en este caso la cedula del usuario
    string cedula = Console.ReadLine();
    
    //Esto divide las palabras con el split recorriendo carácter por carácter
    string[] arregloDeString = cedula.Split(new char[] { ' ' });
    
    //Este arreglo se encargara de contener los dígitos ya divididos
    int[] digitos = new int[11];
    
    //Este bucle recorrera el string que contiene la cedula para pasárselo al arreglo en forma de entero 
    //ósea pasarlo de char a int.
          foreach (char caracter in cedula)
          {
            for (int i = 0; i < digitos.Length; i++)
            {
              if (i==cont)
              {
                digitos[i] = Int32.Parse(caracter.ToString());
                cont++;
                break;
              }          
            }        
          }
    

    Esto fue lo que se me ocurrio.

    Y me funciono.

    • Marked as answer by Ovegeton Sunday, May 08, 2011 2:47 PM
    Sunday, May 08, 2011 2:47 PM
  • hola

    esta linea para que esta

    string[] arregloDeString = cedula.Split(new char[] { ' ' });

     

    ademas vero que pones fijo la cantidad de digitos

    int[] digitos = new int[11];

    pero si lo harias asi

    int[] digitos= cedula.ToCharArray().ToList().ConvertAll(o => Convert.ToInt32(o)).ToArray();

    tendrias lo mismo en una sola linea

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Sunday, May 08, 2011 2:54 PM
  • Además de lo que comenta Leandro acerca de que sobra la línea que define string[] arregloDeString, también hay que señalar que lo del bucle "for" dentro del "foreach" merecería un serio repaso...

     

    Sunday, May 08, 2011 3:14 PM