2017-09-18 3 views
3

Nehmen Sie dieses ein minimales Beispiel arbeitenWie zwei Aufrufe von >> in einem Setw enthalten?

#include <iostream> 
#include <iomanip> 
using namespace std; 
int main() 
{ 

    cout << setw(10) << "aaaaaaa" 
      << setw(10) << "bbbb" 
      << setw(10) << "ccc" 
      << setw(10) << "ddd" 
      << setw(10) << endl; 

    for(int i(0); i < 5; ++i){ 

     char ch = ' '; 
     if (i == 0) 
      ch = '%'; 
     cout << setw(10) << i 
      << setw(10) << i << ch 
      << setw(10) << i 
      << setw(10) << i 
      << setw(10) << endl; 
    } 
    return 0; 
} 

Der Ausgang ist

aaaaaaa  bbbb  ccc  ddd 
     0   0%   0   0 
     1   1   1   1 
     2   2   2   2 
     3   3   3   3 
     4   4   4   4 

Was ich möchte << i << ch in einem Feld von setw(10) enthalten zu tun ist, so dass Spalten korrekt ausgerichtet sind.

+0

Haben Sie die Dokumentation von [setw] (http://en.cppreference.com/w/cpp/io/manip/setw) gelesen? –

+0

@BasileStarynkevitch, also ist die einzige Lösung hier in einer Zeichenfolge verketten? – CroCo

Antwort

2

wahrscheinlich i und ch in einer Zeichenkette kombinieren, setw würde dieses Verhalten nativ nicht akzeptieren

versuchen dieses Snippet

cout << setw(10) << i 
     << setw(10) << std::to_string(i) + ch; 
+0

Ich möchte diesen Ansatz bei Bedarf vermeiden. – CroCo

+2

@CroCo Was war dein Motiv, um dieses Verhalten zu vermeiden? –

+0

@CroCo Also wollen Sie diesen Ansatz vermeiden, aber akzeptieren Sie es gegenüber anderen. Warum? – Yunnosch

2

Sie müssen sie in einer Zeichenfolge verketten, wie folgt aus:

#include <string> 
cout << setw(10) << std::to_string(i) + ch; 

im Allgemeinen.

Aber wenn Sie wissen, dass i ein Zeichen ist, könnte man verwenden:

cout << setw(9) << i << ch; 

das könnte der Fall für Sie, da i scheint ' ' oder '%' zu sein.

+0

Ist dies die einzige Lösung für dieses Problem? – CroCo

+0

Überprüfen Sie mein Update @CroCo – gsamaras

1

Ich bin mir nicht sicher, um Ihre Notwendigkeit zu verstehen.

Sie könnten einige wie z.

std::ostringstream os; 
os << i << ch << std::flush; 
std::cout << setw(10) << os.str(); 

Sie können eine Zeichenfolge, wie James Maa answered

5

bauen Da wir entweder ' ' oder '%' suchen, können Sie einfach statisch berechnen.

cout << setw(10) << i 
    << setw(9) << i << ch 
    << setw(10) << i 
    << setw(10) << i 
    << setw(10) << endl; 
+0

Sehr einfach, sehr elegant. – Chiel

Verwandte Themen