Mostrar ceros a la izquierda en un entero en C++

Iniciado por erest0r, 6 Septiembre 2013, 06:20 AM

0 Miembros y 1 Visitante están viendo este tema.

erest0r

Buenas noches mi problema es que no encuentro como hacer para que un entero muestre n cantidad de ceros (0) a la izquierda, lo mas que he encontrado es de la cabecera <iomanip>, setfill(); setw(); pero setfill() recibe como parametro un char, y queria saber si existia algo parecido como setprecision(); fixed;  pero para el lado izquierdo de los enteros.

Les dejare mi codigo para que vean mejor a que me refiero


#include <iostream>

using namespace std;

int main( int argc, char* args[] )
{
    int numero, digito[4], temp, i, numerocifrado;
    cout << "Ingrese un numero de 4 digitos: ";
    cin >> numero;

    // Obtenemos cada digito por separado
    digito[0] = numero / 1000;
    digito[1] = ( numero % 1000 ) / 100;
    digito[2] = (( numero % 1000 ) % 100 ) / 10;
    digito[3] = (( numero % 1000 ) % 100 ) % 10;

    // Codificamos cada digito
    digito[0] = ( digito[0] + 7 ) %10;
    digito[1] = ( digito[1] + 7 ) % 10;
    digito[2] = ( digito[2] + 7 ) % 10;
    digito[3] = ( digito[3] + 7 ) % 10;

    // Intercambiamos las posiciones de cada digito

    // El primer digito con el tercero
    temp = digito[0];
    digito[0] = digito[2];
    digito[2] = temp;

    // Y el segundo digito con el cuarto
    temp = digito[1];
    digito[1] = digito[3];
    digito[3] = temp;

    // Pasamos los valores segun la posicion de la variable digito[] a numerocifrado
    numerocifrado = ( digito[0] * 1000 ) + ( digito[1] * 100 ) + ( digito[2] * 10 ) + digito[3];

    // Mostramos el numero cifrado
    cout << "Numero original: " << numero << endl
         << "Numero cifrado:  " << numerocifrado << endl;

   

    cin.get();
return 0;
}



Si introducen el numero 1234, deberia mostrar 0189, pero solo muestra 189, a eso me estoy refiriendo, ¿Como mostrar ese cero a la izquierda faltante?

Muchas gracias.
Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.

eferion

El ejemplo que te pongo a continuación debería imprimir 00025

Código (c++) [Seleccionar]
cout << setfill('0') << setw(5) << 25;

* setfill configura el caracter de relleno.
* setw configura la longitud en caracteres de los valores que se pasen a continuación.

erest0r

De esa forma ya la habia hecho, pense que existia otra solucion, gracias.
Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.

Stereo



Eternal Idol

C++ es un mejor C como indica su nombre y la biblioteca cstdio (propia de C++ y no de C) declara la funcion de estilo C printf.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

ecfisa

Hola erest0r.

Citar...lo mas que he encontrado es de la cabecera <iomanip>, setfill(); setw(); pero setfill() recibe como parametro un char, y queria saber si existia algo parecido como setprecision(); fixed;  pero para el lado izquierdo de los enteros.

Es que numéricamente no tiene ningún sentido usar ceros a la izquierda. Es decir, si es a efectos de presentación, tratá el valor como una secuencia de caracteres.

Saludos. :)



eferion

Cita de: Eternal Idol en  6 Septiembre 2013, 12:34 PM
C++ es un mejor C como indica su nombre y la biblioteca cstdio (propia de C++ y no de C) declara la funcion de estilo C printf.

Lo se, pero si estás haciendo prácticas en c++... céntrate en programar c++.

printf, aunque sea algo perfectamente válido en c++, es c.

A mi me ha venido gente diciendo que sabía programar en c++ sólo porque mezclaban algunas instancias de string en código c puro... eso le duela a quien le duela no es programar en c++.

Eternal Idol

En fin, cualquier codigo que no compile en C no es C y cualquier codigo que compile en C++ lo es. Guste o no C++ es un lenguaje multiparadigma y muy versatil.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

eferion

Cita de: Eternal Idol en  6 Septiembre 2013, 13:01 PM
En fin, cualquier codigo que no compile en C no es C y cualquier codigo que compile en C++ lo es. Guste o no C++ es un lenguaje multiparadigma y muy versatil.

Ya, pero si no aprovechas las características que diferencian c++ de c... estás programando realmente en c.


void main( )
{
  printf ( "Programa en C\n" );
}


Código (cpp) [Seleccionar]

void main( )
{
  printf( "Programa en C++\n" );
}


Realmente el segundo ejemplo es programar en c++??? el compilador te generará un ejecutable válido... está claro, pero eso no es c++. El estándar aceptó en su momento todas las librerías de c entre otras cosas para facilitar la migración del código... fuera de eso no tiene sentido porque entonces te encuentras con que es el único estándar que tiene la mitad de su biblioteca con funciones duplicadas.