2009-04-26 8 views
6

Mucho novato aquí, por lo que es mejor asumir que no sé nada en ninguna respuesta.Insertar y eliminar comas de enteros en C++

He estado escribiendo una pequeña aplicación, y está funcionando bien, pero la legibilidad es una pesadilla con mis números.

Esencialmente, todo lo que quiero hacer es agregar comas en los números que se muestran en la pantalla para que sea más fácil de leer. ¿Hay una manera rápida y fácil de hacer esto?

He estado utilizando la secuencia de cadenas para capturar mis números (no estoy seguro de por qué esto incluso se sugiere en este punto, simplemente se aconseja en el tutorial), como (recortar los bits irrelevantes) :

#include <iostream> 
#include <string> 
#include <sstream> 
using namespace std; 

int items; 
string stringcheck; 

... 

    cout << "Enter how many items you have: "; 
     getline (cin, stringcheck); 
     stringstream(stringcheck) >> items; 

... 

    cout << "\nYou have " << items << " items.\n"; 

Cuando ese número se escribe como algo grande, entre todo lo demás se convierte en un dolor de cabeza para leer.

¿Hay alguna manera rápida y fácil de imprimir "13,653,456" en lugar de "13653456" como lo haría ahora (suponiendo que eso fuera lo que se ingresó, por supuesto)?

Nota: Si es importante, lo estoy haciendo como una aplicación de consola en Microsoft Visual C++ 2008 Express Edition.

+0

En lugar de usar "\ n", puedes usar std :: endl; para ingresar un carácter de nueva línea. – Tom

+0

@Tom: No, a menos que quiera que la corriente también se vacíe (mientras se paga una pequeña penalización de tiempo por el color). – dirkgently

+0

@dirkgently: Buen punto, no voy a discutir. Pero no creo que sea a lo que él iba (estoy jugando la carta de "Muy novato" al comienzo de la pregunta). – Tom

Respuesta

16

Pruebe la faceta numpunct y sobrecargue la función do_thousands_sep. Hay un example. También pirateé algo que simplemente resuelve tu problema:

#include <locale> 
#include <iostream> 

class my_numpunct: public std::numpunct<char> { 
    std::string do_grouping() const { return "\3"; } 
}; 

int main() { 
    std::locale nl(std::locale(), new my_numpunct); 
    std::cout.imbue(nl); 
    std::cout << 1000000 << "\n"; // does not use thousands' separators 
    std::cout.imbue(std::locale()); 
    std::cout << 1000000 << "\n"; // uses thousands' separators 
} 
+0

Gracias señor, tomaré una lectura. – Dmatig

+0

+1, vencerme. No pude encontrar el nombre de la faceta que estaba buscando :) – JaredPar

Cuestiones relacionadas