2012-01-05 34 views
5

Tôi đã ma trận sau đây được lưu trữ trong một int [] [] trong C++ (xin lỗi mà tôi đã không đặt tất cả các dấu phẩy trong):Làm thế nào để thuận tiện sắp xếp số trực thuộc Trung ương trong C++ cout

int[8][]a={ 
    1 2 3 4 5 6 7 8 
    28 29 30 31 32 33 34 9 
    27 48 49 50 51 52 35 10 
    26 47 60 61 62 53 36 11 
    25 46 59 64 63 54 37 12 
    24 45 58 57 56 55 38 13 
    23 44 43 42 41 40 39 14 
    22 21 20 19 18 17 16 15}; 

Và tôi cần để in nó ra với các chữ số duy nhất sắp xếp độc đáo với phần còn lại. Làm thế nào để làm điều này thuận tiện? Tôi đã sử dụng setw, nhưng có vẻ như nó chỉ làm cho đầu ra được hợp lý đúng.

Cảm ơn bạn.

Sửa

Có lẽ tôi đã không nói rõ điều này. Xin lỗi vì điều đó. Tôi muốn kết quả giống như sau:

1 2 3 4 5 6 7 8 
    228 129 130 131 32 33 34 9 

Giả sử tôi có nhiều chữ số hơn trong các số.

+1

Nếu "tập trung" có nghĩa là bạn muốn khoảng trắng ở bên phải của số, hãy cân nhắc đặt nó ở phía trước (bên trái) - sau đó setw sẽ thực hiện công việc một cách độc đáo. –

+0

Mỗi khi tôi thử và làm điều này theo cách C++, tôi bỏ cuộc sau một lúc và chỉ hack nó bằng 'printf' trong 3 giây. –

Trả lời

3

Bạn có thể chọn nơi đệm nên đi:

  • out << std::left sẽ làm cho sản lượng bị bỏ lại biện minh
  • out << std::right sẽ làm cho đầu ra là đúng lý
  • out << std::internal sẽ rời biện minh cho bất kỳ dấu hiệu và phải biện minh cho số
  • out << std::showpos sẽ hiển thị cả dấu dương và dấu âm (trong trường hợp bạn muốn xem hiệu quả của std::internal

Ban đầu, luồng được thiết lập để thực hiện biện minh trái (mặc dù tôi bóp cổ không thấy định nghĩa tương ứng trong tiêu chuẩn).

4

Bạn muốn # bao gồm iomanip và sử dụng std :: setw và std :: right (hoặc một trong các sắp xếp khác được đề cập bởi Dietmar Kühl). Dưới đây là một ví dụ:

#include <iostream> 
#include <iomanip> 

int main(int argc, const char* argv[]) 
{ 
    int numbers[4][4] = { 
     {1, 10, 5, 6}, 
     {536, 5769, 342, 112}, 
     {2,43,43,6}, 
     {2,2,2,3}}; 

    for(int i = 0; i < 4; ++i) 
    { 
     for(int j = 0; j < 4; ++j) 
     { 
      std::cout << std::right << std::setw(7) << numbers[i][j]; 
     } 

     std::cout << std::endl; 
    } 

    return 0; 
} 

Trong ví dụ trên, tôi là số in đúng phù hợp với chiều rộng cột 7, sản lượng kết quả như sau:

 1  10  5  6 
    536 5769 342 112 
     2  43  43  6 
     2  2  2  3 
0

Để in số tập trung ở một lĩnh vực:

#include <string> 
#include <iostream> 
#include <sstream> 

using namespace std; 


// Print num centered in width columns 
void centerint(int num, int width) 
{ 
    stringstream ss; 
    ss << num; 
    string str = ss.str(); 
    int pad = (width - str.size())/2; 
    for(int i=0; i<pad; i++) 
    cout << " "; 
    cout << str << endl; 
} 

int main() 
{ 
    // lets try a few 
    centerint( 1, 9); 
    centerint(-238, 9); 
    centerint(16, 9); 
} 

in này:

1 
    -238 
    16 
Các vấn đề liên quan