Cout << ऑपरेटर का उपयोग करते समय मैं अग्रणी शून्य के साथ इंट को कैसे पैड कर सकता हूं? [डुप्लिकेट]


249

मैं coutअग्रणी शून्य के साथ एक इंट का उत्पादन करना चाहता हूं , इसलिए मूल्य के 1रूप में मुद्रित किया जाएगा 001और मूल्य के 25रूप में मुद्रित किया जाएगा 025। मैं यह कैसे कर सकता हूँ?

जवाबों:


368

निम्नलिखित के साथ,

#include <iomanip>
#include <iostream>

int main()
{
    std::cout << std::setfill('0') << std::setw(5) << 25;
}

आउटपुट होगा

00025

setfill' 'डिफ़ॉल्ट रूप से अंतरिक्ष वर्ण ( ) पर सेट है । setwछपने के लिए क्षेत्र की चौड़ाई निर्धारित करता है, और यह बात है।


यदि आप यह जानने में रुचि रखते हैं कि सामान्य रूप से आउटपुट स्ट्रीम कैसे बनाते हैं, तो मैंने एक और प्रश्न के लिए एक उत्तर लिखा, आशा है कि यह उपयोगी है: स्वरूपण C ++ कंसोल आउटपुट।


3
लेकिन .. कैसे मैं एक स्ट्रिंग के लिए स्वरूपित आउटपुट लिख सकते हैं ( char* or char[]) सीधे सांत्वना करने के लिए नहीं। वास्तव में मैं एक फंक्शन लिख रहा हूं, जो स्वरूपित स्ट्रिंग
शशवत

12
@harsh उपयोग std :: stringstream
cheshirekow

8
ऐसा करने के बाद स्ट्रीम प्रारूप को पुनर्स्थापित करने के लिए मत भूलना या आपको बाद में एक बुरा आश्चर्य मिलेगा।
कोड एबॉमिनेटर

14
इस जवाब ने मुझे सही दिशा में इशारा किया लेकिन इसमें सुधार किया जा सका। वास्तव में इस कोड का उपयोग करने के लिए, आपको अपनी फ़ाइल के शीर्ष पर <iostream>और शामिल करने की आवश्यकता होगी <iomanip>, और आपको लिखने की आवश्यकता होगी using namespace std;, लेकिन यह बुरा अभ्यास है इसलिए शायद आपको इस उत्तर में तीन पहचानकर्ताओं के साथ उपसर्ग करना चाहिए std::
डेविड ग्रेसन

@ शाश्वत आप निम्नलिखित कोड का उपयोग कर सकते हैं - std :: stringstream filename; filename.fill ( '0'); filename.width (5); फ़ाइल नाम << std :: to_string (i);
प्रिंस पटेल

45

इसे प्राप्त करने का एक और तरीका printf()सी भाषा के पुराने फ़ंक्शन का उपयोग करना है

आप इस तरह का उपयोग कर सकते हैं

int dd = 1, mm = 9, yy = 1;
printf("%02d - %02d - %04d", mm, dd, yy);

यह 09 - 01 - 0001कंसोल पर प्रिंट होगा ।

आप sprintf()नीचे दिए गए स्ट्रिंग जैसे स्वरूपित आउटपुट को लिखने के लिए किसी अन्य फ़ंक्शन का उपयोग कर सकते हैं:

int dd = 1, mm = 9, yy = 1;
char s[25];
sprintf(s, "%02d - %02d - %04d", mm, dd, yy);
cout << s;

stdio.hइन दोनों कार्यों के लिए अपने प्रोग्राम में हेडर फ़ाइल शामिल करना न भूलें

ध्यान दिया जाना:

आप रिक्त स्थान को 0 या किसी अन्य चार्ट (संख्या नहीं) द्वारा भर सकते हैं।
यदि आप ऐसा कुछ लिखते हैं जैसे %24dप्रारूप निर्दिष्ट करें तो इससे 2रिक्त स्थान नहीं भरेगा । इससे पैड सेट हो जाएगा 24और रिक्त स्थान भर जाएगा।


10
मुझे पता है कि यह एक पुराना उत्तर है, लेकिन यह अभी भी बताया जाना चाहिए कि स्प्रिंटफ को आमतौर पर बहुत अधिक विश्वसनीय नहीं होना चाहिए क्योंकि आप उस बफर की लंबाई निर्दिष्ट नहीं कर सकते हैं जिसे यह लिखना है। Snprintf का उपयोग करना सुरक्षित हो जाता है। * Printf () के विपरीत धाराओं का उपयोग करना भी अधिक सुरक्षित है क्योंकि संकलक के पास संकलन के प्रकारों को समय पर जांचने का मौका है; आरकेके का स्वीकृत उत्तर दोनों प्रकार सुरक्षित और "मानक" सी ++ है, और यह हेडर पर भरोसा नहीं करता है जो वैश्विक नाम स्थान को विषाक्त करते हैं।
मैग्नस

उदाहरण के रूप में उत्तर दिनांक स्वरूपण का उपयोग कर रहा है। ध्यान दें, हालांकि, यह एक उदाहरण के रूप में एक विदेशी समय प्रारूप का उपयोग कर रहा है, भले ही यह सतह पर ISO_8601 के समान दिखता है ( en.wikipedia.org/wiki/ISO_8601 )।
varepsilon

31
cout.fill('*');
cout << -12345 << endl; // print default value with no field width
cout << setw(10) << -12345 << endl; // print default with field width
cout << setw(10) << left << -12345 << endl; // print left justified
cout << setw(10) << right << -12345 << endl; // print right justified
cout << setw(10) << internal << -12345 << endl; // print internally justified

यह उत्पादन का उत्पादन करता है:

-12345
****-12345
-12345****
****-12345
-****12345

18
cout.fill( '0' );    
cout.width( 3 );
cout << value;

लेकिन .. कैसे मैं एक स्ट्रिंग के लिए स्वरूपित आउटपुट लिख सकते हैं ( char* or char[]) सीधे सांत्वना करने के लिए नहीं। वास्तव में मैं एक फंक्शन लिख रहा हूं, जो स्वरूपित स्ट्रिंग
शशवत

2
@Shashwat त्रिपाठी का प्रयोग करें std::stringstream
आरा 19

@AraK मुझे लगता है कि यह टर्बो C ++ में काम नहीं करेगा। मैं इसे का उपयोग कर इस्तेमाल किया sprintf(s, "%02d-%02d-%04d", dd, mm, yy);जहां sहै char*और dd, mm, yyके हैं intप्रकार। यह 02-02-1999चर में मूल्यों के अनुसार प्रारूप लिखेगा ।
शशवत

2

C ++ 20 में आप कर पाएंगे:

std :: cout << std :: format ("{: 03}", 25); // प्रिंट 025

1

मैं निम्नलिखित फ़ंक्शन का उपयोग करूंगा। मुझे पसंद नहीं है sprintf; यह वह नहीं करता जो मैं चाहता हूँ !!

#define hexchar(x)    ((((x)&0x0F)>9)?((x)+'A'-10):((x)+'0'))
typedef signed long long   Int64;

// Special printf for numbers only
// See formatting information below.
//
//    Print the number "n" in the given "base"
//    using exactly "numDigits".
//    Print +/- if signed flag "isSigned" is TRUE.
//    Use the character specified in "padchar" to pad extra characters.
//
//    Examples:
//    sprintfNum(pszBuffer, 6, 10, 6,  TRUE, ' ',   1234);  -->  " +1234"
//    sprintfNum(pszBuffer, 6, 10, 6, FALSE, '0',   1234);  -->  "001234"
//    sprintfNum(pszBuffer, 6, 16, 6, FALSE, '.', 0x5AA5);  -->  "..5AA5"
void sprintfNum(char *pszBuffer, int size, char base, char numDigits, char isSigned, char padchar, Int64 n)
{
    char *ptr = pszBuffer;

    if (!pszBuffer)
    {
        return;
    }

    char *p, buf[32];
    unsigned long long x;
    unsigned char count;

    // Prepare negative number
    if (isSigned && (n < 0))
    {
        x = -n;
    }
    else
    {
        x = n;
    }

    // Set up small string buffer
    count = (numDigits-1) - (isSigned?1:0);
    p = buf + sizeof (buf);
    *--p = '\0';

    // Force calculation of first digit
    // (to prevent zero from not printing at all!!!)
    *--p = (char)hexchar(x%base);
    x = x / base;

    // Calculate remaining digits
    while(count--)
    {
        if(x != 0)
        {
            // Calculate next digit
            *--p = (char)hexchar(x%base);
            x /= base;
        }
        else
        {
            // No more digits left, pad out to desired length
            *--p = padchar;
        }
    }

    // Apply signed notation if requested
    if (isSigned)
    {
        if (n < 0)
        {
            *--p = '-';
        }
        else if (n > 0)
        {
            *--p = '+';
        }
        else
        {
            *--p = ' ';
        }
    }

    // Print the string right-justified
    count = numDigits;
    while (count--)
    {
        *ptr++ = *p++;
    }
    return;
}

1

आउटपुट का एक और उदाहरण शून्य अंकों का एकल अंकों के मूल्यों पर एक भरण चरित्र के रूप में उपयोग करना है: 2017-06-04 18:13:02

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;

int main()
{
    time_t t = time(0);   // Get time now
    struct tm * now = localtime(&t);
    cout.fill('0');
    cout << (now->tm_year + 1900) << '-'
        << setw(2) << (now->tm_mon + 1) << '-'
        << setw(2) << now->tm_mday << ' '
        << setw(2) << now->tm_hour << ':'
        << setw(2) << now->tm_min << ':'
        << setw(2) << now->tm_sec
        << endl;
    return 0;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.