C++ ostream 常用格式
阿新 • • 發佈:2019-02-07
注意一點: std::setw只對下一個輸出值有效,其他選項所有隨後的輸出都有效,比如:
case: std::cout << "[" << std::setw(6) << std::setfill('0') << "AAAA" << "BBBB" << "]"; // [00AAAABBBB] 可見"AAAA"被擴充套件成了6個字元寬度,而BBBB沒有被擴充套件;因為std::setw只對緊跟著的輸出有效, 即只對輸出"AAAA"有效,而對"BBBB"輸出無效。雖然std::setfill對輸出"BBBB"還是有效的, 但是因為長度限定, "BBBB"的輸出不需要padding也就看不出setfill起作用了,看下面case 2例子就明白。 case: std::cout << "[" << std::setw(6) << std::setfill('0') << "AAAA" << std::setw(6) << "BBBB" << "]"; // [00AAAA00BBBB] 可以看出setfill對所有的後續輸出都有效。 1. setw: 設定下一個輸出域的寬度 case: std::cout << "[" << std::setw(8) << "AAAA" << "]"; // [ AAAA] 設定域的輸出長度為6,而實際字串長度為4,所有前面補四個空格。 如果setw的數值小於實際資料長度,setw的值無效,比如上述例子: case: std::cout << "[" << std::setw(3) << "AAAA" << "]" // [AAAA] 因為3小於實際字串長度4,最終輸出整個字串。 2. left/right/internal:在設定了輸出域的寬度setw後,如果設定對齊方式,左對齊還是右對齊 case: std::cout << "[" << std::setw(8) << std::left << "AAAA" << "]"; // [AAAA ] case: std::cout << "[" << std::setw(8) << std::right << "AAAA" << "]"; // [ AAAA] case: std::cout << "[" << std::setw(8) << "AAAA" << "]"; // [ AAAA] 預設是右對齊(std::right) 關於選項internal,在後面輸出數字的時候再討論;另外沒有居中對齊這個選項。 3. setfill:域寬度不夠時,還可以指定填充字元,用來代替預設的空格 case: std::cout << "[" << std::setw(8) << std::setfill('0') << "AAAA" << "]"; // [0000AAAA] 使用字元'0'作為填充 case: std::cout << "[" << std::setw(8) << std::setfill('0') << std::left << "AAAA" << "]"; // [AAAA0000] 4. showpos:輸出數字的正負號 case: std::cout << "[" << std::showpos << 123 << "]"; // [+123] case: std::cout << "[" << std::showpos << -456 << "]"; // [-456] case: std::cout << "[" << std::showpos << 0 << "]"; // [+0] 也可以指定數字域寬度setw case: std::cout << "[" << std::showpos << std::setw(8) << 123 << "]"; // [ +123] case: std::cout << "[" << std::showpos << std::setw(8) << -456 << "]"; // [ -456] case: std::cout << "[" << std::showpos << std::setw(8) << 0 << "]"; // [ +0] 設定fill case: std::cout << "[" << std::showpos << std::setw(8) << std::setfill('0') << 123 << "]"; // [0000+123] case: std::cout << "[" << std::showpos << std::setw(8) << std::setfill('0') << -456 << "]"; // [0000-456