2008-11-09 14 views
26

अदालत मैं बहुत यकीन है कि यह स्वरूपण के संबंध में एक सरल सवाल है, लेकिन यहाँ है कि मैं क्या करना चाहते हूँ। मैं इसे एक टेबल प्रारूप के रूप में आउटपुट करना चाहता हूं। इसका मतलब यह है कि कॉलम और पंक्तियों को सही ढंग से गठबंधन किया जाना चाहिए। उदाहरण:प्रारूपण

Test     1 
Test2    2 
Iamlongverylongblah 2 
Etc     1 

मैं उत्पादन करने के लिए अपने लाइन तो अब (काम नहीं कर रहा) केवल व्यक्तिगत लाइन के साथ चिंतित हूँ

अदालत < < var1 < < "\ t \ t" < < var2 < < endl है ;

कौन सा मेरे जैसे कुछ देता है:

Test     1 
Test2     2 
Iamlongverylongblah   2 
Etc     1 

उत्तर

44

setw

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() { 
    cout << setw(21) << left << "Test" << 1 << endl; 
    cout << setw(21) << left << "Test2" << 2 << endl; 
    cout << setw(21) << left << "Iamlongverylongblah"  << 2 << endl; 
    cout << setw(21) << left << "Etc"  << 1 << endl; 
    return 0; 
} 
+0

मुझे दे नहीं करता जो मैं चाहता .. यह सही है आप सुनिश्चित हैं? – BobS

+0

आप "<< बाएं" जोड़ना भूल गए। यदि आप बाएं संरेखित निश्चित फ़ील्ड चाहते हैं तो यह आवश्यक है। –

+1

std :: बाएं प्रत्येक स्वरूपित आउटपुट पर रीसेट नहीं किया गया है, आपको केवल एक बार इसकी आवश्यकता है। (स्ट्रीम की चौड़ाई * है * रीसेट।) –

11

मैं Boost Format का उपयोग कर की सलाह। इस तरह कुछ उपयोग करें:

cout << format("%|1$30| %2%") % var1 % var2; 
2

आपको पहले कॉलम में सबसे लंबी स्ट्रिंग की लंबाई मिलनी चाहिए। फिर आपको उस क्षेत्र में पहले कॉलम में प्रत्येक स्ट्रिंग को उस सबसे लंबी स्ट्रिंग की लंबाई के साथ आउटपुट करने की आवश्यकता होती है। इसका जरूरी अर्थ यह है कि जब तक आप प्रत्येक स्ट्रिंग को पढ़ नहीं लेते हैं तब तक आप कुछ भी नहीं लिख सकते हैं।

+0

क्या कोई आसान तरीका नहीं है? सेटव या कुछ का उपयोग करना। – BobS

+1

> क्या कोई आसान तरीका नहीं है? जब तक कि आप भविष्य की भविष्यवाणी नहीं कर लेते। > सेटव या कुछ का उपयोग करना। हां, सेटव एक क्षेत्र में पहले कॉलम में प्रत्येक स्ट्रिंग को आउटपुट करने का एक तरीका है, जिसकी लंबाई उस सबसे लंबी स्ट्रिंग की लंबाई है। " –

+1

मैंने देखा है कि सबसे स्वरूपित आउटपुट किसी फ़ील्ड के अधिकतम आकार को खोजने के लिए परेशान नहीं है और यदि यह एक सभ्य मूल्य को ओवररन्स करता है, तो ठीक है, लेकिन स्वरूपण थोड़ा अजीब दिखता है जब यह करता है। –

-2

आप के साथ यह कर सकते हैं

string str = "somthing"; 
printf ("%10s",str); 
printf ("%10s\n",str); 
printf ("%10s",str); 
printf ("%10s\n",str);