2016-11-20 5 views
6

के कई हिस्सों को सही ठहराने के लिए तो मैं std::cout को जहां मैं भी तरह डेटा के आसपास कुछ वर्ण प्रदर्शित करने के लिए डेटा के एक स्तंभ भेजना है:सी ++ कैसे सही डेटा

Plot Points 
    (0,0), (2,3) 
(1,10), (12,14) 

मैं कहाँ का औचित्य साबित सही करने के लिए है कॉलम हेडर में "Points" में "s" पत्र के तहत अंतिम दाएं कोष्ठक।

मैं की तरह डेटा बाहर डाल रहा हूँ:

cout << right << setw(12) << "(" << x1 << "," << y1 << "), (" << x2 << "," << y2 << ")"; 

लेकिन सभी उदाहरण मैंने देखा है, पता चलता है कि सही और setw केवल डेटा के अगले टुकड़े मैं cout को भेजने को प्रभावित लगते हैं में तो इस मामले में केवल "("

क्या उन सभी पात्रों और चरों को समूहबद्ध करने का कोई तरीका है ताकि उन्हें आउटपुट के कॉलम में एक साथ उचित बनाया जा सके?

मैं सिर्फ सी ++ सीख रहा हूं इसलिए उम्मीद है कि कुछ आसान समाधान मैंने अभी तक नहीं सीखा है?

उत्तर

2

एक संभावना है कि स्ट्रिंगस्ट्रीम का उपयोग करके फ़ील्ड बनाने वाले आइटमों को प्रारूपित करना, फिर उस स्ट्रिंग को सही तरीके से लिखें।

1

सी ++ डेटा के कई टुकड़ों को सही ठहराने के लिए कैसे करें?

त्वरित उत्तर: क्रमशः और प्रत्येक टुकड़े के लिए अलग से।


एक अच्छी शुरुआत I/O manipulators और उनके गुणों के साथ खुद को परिचित कराने के लिए किया जाएगा। आपके मामले में जब आप setw लागू करते हैं, तो यह एक प्रारूप ध्वज सेट करता है और इस ध्वज का मान लगातार नहीं होता है ("चिपचिपा"), लेकिन यह इसके प्रारंभिक मान पर रीसेट हो जाता है। क्यों setw उपयोग के बाद पुनर्स्थापित करने के लिए लग रहे हैं पर अधिक गहन विश्लेषण अधिक, see here.

वहाँ उन सभी पात्रों और चर एक साथ उन सब को उत्पादन के कॉलम में एक साथ जायज है करने के लिए समूह के लिए कोई तरीका है के लिए?

अब, अपने विशिष्ट समस्या के लिए, आप एक std::stringstream वस्तु में अपने सभी डेटा डालने के रूप में अन्य उत्तर में बताया की कोशिश और फिर कर सकते हैं केवल एक बार वांछित संपत्ति लागू होते हैं,।

मैं सिर्फ सी ++ सीख रहा हूं इसलिए उम्मीद है कि कुछ आसान समाधान मैंने अभी तक नहीं सीखा है?

सबसे आसान समाधान एक सहायक कार्य लिखना होगा जो वांछित कार्य को प्रभावित करता है, जो कुछ भी आप चाहते हैं उसे करने के लिए सी ++ भाषा सुविधा के लिए कोई आसान ज्ञात नहीं है (मुझे)।


6

वहाँ समूह उन सभी पात्रों और चर एक साथ करने के लिए किसी भी तरह से उन सब को उत्पादन के कॉलम में एक साथ जायज है करने के लिए है?

हाँ, आप एक स्ट्रिंग के निर्माण के लिए एक छोटे से सहायक फ़ंक्शन का उपयोग कर सकते हैं:

std::string parentized_pair(int x, int y) { 
    std::ostringstream oss; 
    oss << "(" << x "," << y << ")"; 
    return oss.str(); 
} 

और प्रयोग अंतिम आउटपुट में है कि एक: adjustfield करने के लिए आप उपयोग कर सकते हैं

cout << right << setw(12) << parentized_pair(x1,y1) 
    << right << setw(12) << parentized_pair(x2,y2); 
2

संबंध में यह निम्नानुसार है।

cout.setf(ios::right, ios::adjustfield); 

संबंध में width या setw लिए दुर्भाग्य से आपको लगता है कि परिभाषित करना होगा प्रत्येक उत्पादन से पहले।

#include <iostream> 

using namespace std; 

int main() { 
    cout<<"Current fill character: " << cout.fill() <<", code: " <<(int)cout.fill()<<endl; 
    cout<<"Current field width : " << cout.width() <<endl; 
    cout<<1<<2<<3<<endl; 
    // changing width; 
    cout.width(3); 
    cout<<"Field width after change : " << cout.width() <<endl; 
    cout<<1<<2<<3<<endl; 
    cout<<"Width after output : " << cout.width() <<endl; 
    // changing width and fill 
    cout.width(3); 
    cout.fill('_'); 
    cout<<"Current fill character: " << cout.fill() <<", code: " <<(int)cout.fill()<<endl; 
    cout<<1<<2<<3<<endl<<endl; 

    cout<<"Setting width before each write:\n"; 
    cout<<"adjustfield - not set/default:\n"; 
    for(unsigned i=1; i <= 3; ++i) { 
     cout.width(3); 
     cout<<i; 
    } 
    cout<<endl; 

    cout<<"adjustfield - left:\n"; 
    cout.setf(ios::left, ios::adjustfield); 
    for(unsigned i=1; i <= 3; ++i) { 
     cout.width(3); 
     cout<<i; 
    } 
    cout<<endl; 

    cout<<"adjustfield - internal:\n"; 
    cout.setf(ios::internal, ios::adjustfield); 
    for(unsigned i=1; i <= 3; ++i) { 
     cout.width(3); 
     cout<<i; 
    } 
    cout<<endl; 

    cout<<"adjustfield - right:\n"; 
    cout.setf(ios::right, ios::adjustfield); 
    for(unsigned i=1; i <= 3; ++i) { 
     cout.width(3); 
     cout<<i; 
    } 
    cout<<endl; 
    return 0; 
} 
/* 
Console output: 

Current fill character: , code: 32 
Current field width : 0 
123 
Field width after change : 3 
123 
Width after output : 0 
Current fill character: _, code: 95 
123 

Setting width before each write: 
adjustfield - not set/default: 
__1__2__3 
adjustfield - left: 
1__2__3__ 
adjustfield - internal: 
__1__2__3 
adjustfield - right: 
__1__2__3 
*/ 

आप का उपयोग करें, या यदि आप हो सकता है आपके डेटा संरचना नया स्वरूप सकता है, आप πάντα के जवाब में विचार का उपयोग कर सकते डेटा संरचना के बारे में अधिक जानकारी प्रदान कर सकते हैं:

निम्नलिखित उदाहरण देखें उदाहरण के लिए, उदाहरण के लिए आप पॉइंट क्लास/स्ट्रक्चर को परिभाषित करते हैं और बेहतर स्वरूपण करने के लिए << विधि को ओवरराइट करते हैं।

+0

सुझावों के लिए धन्यवाद .. अब उन्हें पचाने की कोशिश कर रहा है .. मुझे लगता है कि मुझे इसे एक सरल पाठ्यक्रम के रूप में रखना आसान है ... –

संबंधित मुद्दे