2009-04-26 71 views
6

Rất nhiều tiện ích ở đây, vì vậy tốt nhất bạn nên giả sử tôi không biết gì trong bất kỳ câu trả lời nào.Chèn và xóa dấu phẩy từ số nguyên trong C++

Tôi đã viết một ứng dụng nhỏ và hoạt động tốt, nhưng khả năng đọc là một cơn ác mộng với số của tôi.

Về cơ bản, tất cả những gì tôi muốn làm là thêm dấu phẩy vào các số được hiển thị trên màn hình để dễ đọc hơn. Có cách nào nhanh chóng và dễ dàng để thực hiện việc này không?

Tôi đã sử dụng chuỗi ký tự để lấy số của mình (tôi không chắc tại sao điều này được đề xuất tại thời điểm này, nó được khuyên đơn giản trong hướng dẫn mà tôi đã làm), chẳng hạn như (cắt xén các bit không liên quan) :

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

Khi số đó được nhập là thứ gì đó lớn, trong số mọi thứ khác, nó sẽ trở nên rất nhức đầu để đọc.

Có cách nào nhanh chóng và dễ dàng để in "13,653,456" trái ngược với "13653456" giống như ngay bây giờ (giả sử đó là nội dung đầu vào của khóa học) không?

Lưu ý: Nếu nó quan trọng, tôi đang làm điều này như là một ứng dụng giao diện điều khiển trong Microsoft Visual C++ 2008 Express Edition.

+0

Thay vì sử dụng "\ n", bạn có thể sử dụng lệnh std :: endl; để nhập một ký tự dòng mới. – Tom

+0

@Tom: Không, trừ khi anh ta muốn luồng được xả cũng (trong khi trả tiền phạt một chút cho việc tuôn ra). – dirkgently

+0

@dirkgently: Điểm tốt, sẽ không tranh cãi. Nhưng tôi không nghĩ rằng đó là những gì anh ấy đang đi (tôi đang chơi "Rất nhiều một noob" thẻ tại beggining của câu hỏi). – Tom

Trả lời

16

Thử mặt numpunct và quá tải chức năng do_thousands_sep. Có một example. Tôi cũng đã hack một thứ gì đó giải quyết vấn đề của bạn:

#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

Cảm ơn bạn, tôi sẽ đọc. – Dmatig

+0

+1, đánh bại tôi. Tôi không thể tìm thấy tên của khía cạnh tôi đang tìm :) – JaredPar

Các vấn đề liên quan