2009-04-26 22 views
6

Sehr viel ein Noob hier, so ist es am besten anzunehmen, dass ich nichts in Antworten weiß.Einfügen und Entfernen von Kommas aus Ganzzahlen in C++

Ich habe eine kleine App geschrieben, und es funktioniert gut, aber Lesbarkeit ist ein Albtraum mit meinen Zahlen.

Im Wesentlichen möchte ich nur Kommas in die auf dem Bildschirm angezeigten Zahlen einfügen, um das Lesen zu erleichtern. Gibt es einen schnellen und einfachen Weg, dies zu tun?

Ich habe stringstream verwendet, um meine Zahlen zu erfassen (ich bin nicht sicher, warum dies überhaupt an dieser Stelle vorgeschlagen wird, wurde einfach in der Anleitung empfohlen, die ich durchgearbeitet habe), wie (die irrelevanten Bits ausschneiden) :

#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"; 

Wenn diese Nummer als etwas Großes eingegeben wird, wird es unter allem anderen ziemlich Kopfschmerzen zu lesen.

Gibt es eine schnelle und einfache Möglichkeit, "13.653.456" im Gegensatz zu "13653456" zu drucken, so wie es jetzt wäre (vorausgesetzt, dass das natürlich Input war)?

Hinweis: Wenn es darauf ankommt, mache ich dies als eine Konsolenanwendung in Microsoft Visual C++ 2008 Express Edition.

+0

Statt „\ n“ verwenden, könnten Sie verwenden std :: endl; um ein Newline-Zeichen einzugeben. – Tom

+0

@Tom: Nein, es sei denn, er möchte, dass der Stream ebenfalls gespült wird (während er eine kleine Zeitstrafe für den Flush zahlt). – dirkgently

+0

@dirkgently: Guter Punkt, nicht zu streiten. Aber ich denke nicht, dass es das ist, was er wollte (ich spiele am Anfang der Frage die "Very much a noob" -Karte). – Tom

Antwort

16

Versuchen Sie die numpunct Facette und überlasten Sie die do_thousands_sep Funktion. Es gibt eine example. Ich gehackt auch etwas, das nur Ihr Problem löst:

#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

Vielen Dank, mein Herr, ich werde es lesen. – Dmatig

+0

+1, schlag mich. Ich konnte den Namen der Facette, nach der ich gesucht habe, nicht finden :) – JaredPar

Verwandte Themen