2015-10-15 43 views
1

我試圖cout一個字符串後填充,使得輸出的總長度爲,比如說15C++:設置的打印一個字符串

例如,如果字符串是「湯姆」,那麼我在cout之後想要12個空格。我知道如何使用setfillsetw擁有領先的空間,但是有沒有內置填充空間的方式?或者唯一的方法是獲取字符串長度並在字符串的末尾添加一堆空格?

謝謝!

回答

3

我認爲你正在尋找std::left輸出修改。

#include <iomanip> // std::setw 
#include <ios>  // std::left 
#include <iostream> // std::cout 
#include <string>  // std::string 

int 
main() 
{ 
    const std::string words[] = { 
    "Tom", 
    "Ferdinand", 
    "And finally some longer string", 
    }; 
    for (const auto& w : words) 
    std::cout << std::setw(12) << std::left << w << "|\n"; 
} 

輸出:

Tom   | 
Ferdinand | 
And finally some longer string| 
+0

最好能注意到(或者我錯了)頭部'iostream',它給了我們'cout',包括頭部'ios'? –

+0

@NickyC它可能會在你的實現上做到這一點,但據我所知,標準並沒有說它必須要做,所以你不能依賴它。 – 5gon12eder

+0

最近,查找cppreference.com和N4527,自從C++ 11開始,'iso'似乎被'iostream'包含。 –

0

我想cout的字符串,使輸出的總長度, 說15。例如,如果字符串是「湯姆」 ,那麼我想在cout後12個空格 。

我已經使用了以下...

// ... 
{ 
    std::stringstream ss1; 
    ss1 << "Tom"; // insert 
    const int NameFieldSize = 15; 
    while (ss1.str().size() < NameFieldSize) ss << " "; 
    // ... insert the rest of the info to ss1 
    // now write the full string to cout (or file) 
    std::cout << ss1.str() << std::endl; 
} 
// ... 

stringstream的作品就像清點,所有格式的控制,但由於它是基於,更快的RAM。

請注意,當ss1已經比NameFieldSize更長時,代碼將檢測並可能「修復」輸出格式。