2016-06-03 2 views
0

Ma chaîne est hmm, 350 caractères. Je dois le centrer dans la console afin qu'il ait les mêmes marges du côté gauche et du côté droit. Quand j'essaye de setw() sur ceci, j'obtiens une sortie comme ceci (seulement le début est avec une marge).Comment faire pour imprimer correctement une longue chaîne avec une marge (setw())?

  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 

Ce que je suis en train de réaliser:

   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 

Mon code ressemble à ceci (uniquement pour le côté gauche, je ne l'ai pas encore essayé pour le second encore):

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

Si quelqu'un sait comment atteindre mon objectif, je serai reconnaissant!

+0

votre largeur de ligne peut changer? – user463035818

+0

non, c'est constant –

Répondre

0

Si vous connaissez le linewidth il est assez simple:

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