स्पेस के साथ लेफ्ट-पैड प्रिंटफ


114

प्रिंटफ का उपयोग करते समय मैं बाईं ओर रिक्त स्थान के साथ एक स्ट्रिंग कैसे पैड कर सकता हूं?

उदाहरण के लिए, मैं "हैलो" को 40 स्थानों से पहले प्रिंट करना चाहता हूं।

इसके अलावा, मैं जिस स्ट्रिंग को प्रिंट करना चाहता हूं, उसमें कई लाइनें हैं। क्या मुझे प्रत्येक पंक्ति को अलग से प्रिंट करने की आवश्यकता है?

संपादित करें: बस स्पष्ट होने के लिए, मैं चाहता हूं कि हर पंक्ति से ठीक पहले 40 रिक्त स्थान छपे।

जवाबों:


125

यदि आप चाहते हैं कि "हैलो" शब्द एक कॉलम में प्रिंट हो, जो कि 40 वर्णों का चौड़ा हो, तो रिक्त स्थान बाईं ओर स्थित होने के बाद, निम्न का उपयोग करें।

char *ptr = "Hello";
printf("%40s\n", ptr);

यह आपको 35 स्थान देगा, फिर "हैलो" शब्द। जब आप कॉलम को चाहते हैं, तो आपको यह पता चलता है कि आप सामान को कैसे प्रारूपित करते हैं, लेकिन डेटा बदलता है (ठीक है, यह एक तरीका है जिससे आप इसे कर सकते हैं)।

यदि आप जानते हैं कि आप वास्तव में 40 रिक्त स्थान चाहते हैं, तो कुछ पाठ, बस 40 रिक्त स्थान को स्थिर रखें और उन्हें प्रिंट करें। यदि आपको कई पंक्तियों को प्रिंट करने की आवश्यकता है, तो या तो printfऊपर दिए गए जैसे कई कथनों का उपयोग करें , या इसे लूप में करें, ptrप्रत्येक समय के मूल्य को बदलते हुए ।


3
प्रारूप झंडे के बारे में बहुत ज्यादा जानकारी नहीं है। लेकिन मुझे प्रिंटफ ("% 40s% s \ n", "", ptr) पर संदेह है; यह 40 स्थानों के साथ पैड करने के लिए भी इस्तेमाल किया जा सकता है?
जोहान्स शाउब -

हां, यह हमेशा आपको सूचक की सामग्री से पहले 40 रिक्त स्थान देगा। यह एक अच्छा समाधान है, लेकिन अगर आपको इसे बहुत कुछ करना है तो मुझे लगता है कि 40 स्थानों के साथ एक निरंतर तेजी से होगा। मुझे नहीं पता कि कंपाइलर प्रिंटफ फॉर्मेट को ऑप्टिमाइज़ कर पाता है या नहीं।
छिपकली

38
इसके अलावा, यदि आपके पास एक अंतर चर 'n' है जिसमें शामिल करने के लिए रिक्त स्थान की संख्या है, तो आप उपयोग कर सकते हैं: printf ("% * s% s \ n", n, "", ptr); रिक्त स्थान की एक चर संख्या प्राप्त करने के लिए।
जोनाथन लेफ्लर

और, क्यू के अंतिम भाग को संबोधित करने के लिए: हाँ, यदि आप चाहते हैं कि डेटा की प्रत्येक पंक्ति 40 प्रमुख स्थानों के साथ मुद्रित हो, तो आपको डेटा को अलग करने की आवश्यकता है ताकि प्रत्येक पंक्ति अलग से मुद्रित हो।
जोनाथन लेफ़लर

4
@ जोनाथन लेफ़लर: बेशक कंपाइलर प्रिंटफ फॉर्मेट को ऑप्टिमाइज़ कर सकता है। उदाहरण के लिए, जीसीसी प्रिंटफ ("% s \ n", फू) का अनुकूलन करता है और इसे पुट (फू) से बदल देता है।
सैम होसेवर

73

मैं इस फ़ंक्शन का उपयोग अपने आउटपुट को इंडेंट करने के लिए करता हूं (उदाहरण के लिए ट्री स्ट्रक्चर प्रिंट करने के लिए)। indentस्ट्रिंग से पहले रिक्त स्थान की संख्या है।

void print_with_indent(int indent, char * string)
{
    printf("%*s%s", indent, "", string);
}

7
मुझे इंडेंटेशन को बाकी प्रिंटफ फॉर्मेट से अलग रखने के लिए स्ट्रिंग शाब्दिक कॉन्टेनेटेशन का आपका उपयोग पसंद है। एक सुझाव: इंडेंट स्ट्रिंग के लिए एकल स्थान के बजाय एक खाली स्ट्रिंग का उपयोग करें। इस तरह इंडेंट == 0 उम्मीद के मुताबिक काम करेगा। (यानी, printf(..., indent, "", ...))
robeuroburɳ

ध्यान दें, रे हुल्हा ने "संकलक समस्या" को ठीक करने के लिए, स्ट्रिंग शाब्दिक संघनन को स्पष्ट रूप से हटा दिया है।
mwfearnley

42
int space = 40;
printf("%*s", space, "Hello");

यह कथन 40 अक्षरों की एक पंक्ति आरक्षित करेगा, पंक्ति के अंत में प्रिंट स्ट्रिंग (अतिरिक्त रिक्त स्थान को हटाकर, जैसे कि कुल पंक्ति की लंबाई 40 के बराबर है)। उसी का उपयोग वर्णों और पूर्णांकों के लिए किया जा सकता है:

printf("%*d", space, 10);
printf("%*c", space, 'x');

रिक्त स्थान निर्धारित करने के लिए एक पैरामीटर का उपयोग करने वाली यह विधि उपयोगी है जहां रिक्त स्थान की एक चर संख्या की आवश्यकता होती है। ये कथन अभी भी पूर्णांक शाब्दिक के साथ काम करेंगे:

printf("%*d", 10, 10);
printf("%*c", 20, 'x');
printf("%*s", 30, "Hello");

आशा है कि यह भविष्य में मेरे जैसे किसी की मदद करेगा।


मुझे मिल गया error: empty character constantके लिए ''। यह नहीं होना चाहिए ' '?
जिन क्वॉन

हाँ, यह चाहिए।
शेजेफ

@ जीनकॉन कोई भी पात्र, जैसे "Hello"कुछ भी हो सकता है, उसे एक उदाहरण का उपयोग करना चाहिए था
जो पेलेयर

19

यदि आप स्ट्रिंग से पहले बिल्कुल 40 रिक्त स्थान चाहते हैं तो आपको बस करना चाहिए:

printf("                                        %s\n", myStr );

यदि यह बहुत गंदा है, तो आप कर सकते हैं (लेकिन यह 40 स्थानों को मैन्युअल रूप से टाइप करने की तुलना में धीमा होगा): printf("%40s%s", "", myStr );

यदि आप चाहते हैं कि स्ट्रिंग को स्तंभ 40 पर पंक्तिबद्ध किया जाए (अर्थात 39 स्थान तक इसे आगे बढ़ाया जाए, तो यह सही है कि सबसे अधिक वर्ण स्तंभ 40 में है) तो ऐसा करें: printf("%40s", myStr);

आप स्ट्रिंग को "40" तक लगा सकते हैं। printf("%-40s", myStr);


2
स्ट्रिंग के बाद रिक्त स्थान के लिए इस टिप्पणी की तरह
oneat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.