2016-06-03 5 views
0

Meine Saite ist hmm, 350 Zeichen lang. Ich muss es in der Konsole zentrieren, so dass es die gleichen Ränder von der linken und rechten Seite hat.Wie drucke ich lange Saite mit einem Rand (setw()) richtig?

Wenn ich versuche, setw() auf diese, bekomme ich eine Ausgabe wie folgt (nur der Anfang ist mit einem Rand).

  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 

Was ich zu erreichen versuchen:

   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 

Mein Code sieht wie folgt aus (nur für die linke Seite, habe ich nicht einmal versuchen, für die zweite noch):

out << left << setw(20) << " " << longString << endl; 

Wenn jemand weiß, wie ich mein Ziel erreichen kann, werde ich dankbar sein!

+0

Ihre Linienbreite ändern? – user463035818

+0

Nein, es ist konstant –

Antwort

0

Wenn Sie wissen, die Linienbreite ist es ziemlich einfach:

#include <iostream> 
#include <string> 
#include <iomanip> 

int main(){ 
    std::string longstring = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 
    int margin = 5; 
    int linewidth = 10; 
    int pos = 0; 
    while (pos < longstring.size()){ 
     std::cout << std::setw(linewidth) 
        << longstring.substr(pos,linewidth-margin) << std::endl; 
     pos+= linewidth-margin; 
    } 
}