2010-02-10 17 views
65

क्या यह निर्दिष्ट करने का एक तरीका है कि प्रिंट करने के लिए स्ट्रिंग के कितने अक्षर (int में दशमलव स्थानों के समान)?क्या printf() का उपयोग करके मुद्रित करने के लिए स्ट्रिंग के कितने वर्ण निर्दिष्ट करने का कोई तरीका है?

printf ("Here are the first 8 chars: %s\n", "A string that is more than 8 chars"); 

प्रिंट करने के लिए इसे पसंद करेंगे: Here are the first 8 chars: A string

उत्तर

135

बुनियादी तरीका है:

printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars"); 

अन्य, अक्सर, अधिक उपयोगी तरीका है:

printf ("Here are the first %d chars: %.*s\n", 8, 8, "A string that is more than 8 chars"); 

यहाँ, आप के रूप में एक पूर्णांक तर्क printf के लिए (लंबाई निर्दिष्ट) है, जो व्यवहार करता है एक तर्क से लंबाई प्राप्त करने के अनुरोध के रूप में स्वरूप में '*'।

तुम भी संकेतन का उपयोग कर सकते हैं:

printf ("Here are the first 8 chars: %*.*s\n", 
     8, 8, "A string that is more than 8 chars"); 

यह भी "% 8 के अनुरूप है।8s "अंकन, लेकिन फिर आप न्यूनतम और रनटाइम पर अधिकतम लंबाई निर्दिष्ट करने के लिए अनुमति देता है - की तरह एक परिदृश्य में अधिक वास्तविक: printf का उपयोग

printf("Data: %*.*s Other info: %d\n", minlen, maxlen, string, info); 
+2

अंतिम उदाहरण के लिए: यदि कॉपी किया गया स्ट्रिंग minlen से छोटा है? – truthseeker

+3

आउटपुट रिक्त गद्देदार होगा (बाईं तरफ जब तक आप 'निर्दिष्ट' नहीं जोड़ते हैं, इसे पूर्ण निर्दिष्ट लंबाई तक बनाने के लिए। –

7
printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars"); 

% 8s 8 वर्णों की एक न्यूनतम चौड़ाई निर्दिष्ट हैं (..... "% 8s।")। आप 8 पर छंटनी करना चाहते हैं, इसलिए% .8s का उपयोग करें।

आप हमेशा बिल्कुल 8 वर्ण आप% 8.8s

2

सी में इस्तेमाल कर सकते हैं प्रिंट करना चाहते हैं ++ यह आसान है।

std::copy(someStr.c_str(), someStr.c_str()+n, std::ostream_iterator<char>(std::cout, "")); 

संपादित करें: यह भी है ताकि आप अंत नहीं चलती, स्ट्रिंग iterators के साथ इस का उपयोग करने के लिए सुरक्षित है। मुझे यकीन नहीं है कि printf और स्ट्रिंग के साथ क्या होता है जो बहुत कम हैं, लेकिन मुझे लगता है कि यह सुरक्षित हो सकता है।

+20

हेक्टेयर, हाँ यह "आसान" है। सी ++ हमेशा कार दुर्घटना की तरह दिखता है। –

+0

आप अभी भी C++ में printf() कर सकते हैं :) – StasM

+6

मुझे लगता है कि यह कटाक्ष था। 'std :: cout << someStr.substr (0,8); 'कहीं अधिक स्पष्ट है। – MSalters

7

आप

printf("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars"); 

आप सी उपयोग कर रहे हैं कर सकते हैं ++

using namespace std; // for clarity 
string s("A string that is more than 8 chars"); 
cout << "Here are the first 8 chars: "; 
copy(s.begin(), s.begin() + 8, ostream_iterator<char>(cout)); 
cout << endl; 

या, कम कुशलता:

, आप एसटीएल का उपयोग कर एक ही परिणाम प्राप्त कर सकते हैं
cout << "Here are the first 8 chars: " << 
     string(s.begin(), s.begin() + 8) << endl; 
+0

नोट: ** ** ** ** ostream_iterator (cout) 'का उपयोग करें! इसके बजाय, 'ostreambuf_iterator (cout)' का उपयोग करें! प्रदर्शन में अंतर बल्कि बड़ा होना चाहिए। –

4

इसके अलावा पात्रों में से एक निश्चित राशि निर्दिष्ट करने के लिए, आप भी * उपयोग कर सकते हैं जिसका अर्थ है कि printf एक तर्क से वर्णों की संख्या लेता है:

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
     const char hello[] = "Hello world"; 
     printf("message: '%.3s'\n", hello); 
     printf("message: '%.*s'\n", 3, hello); 
     printf("message: '%.*s'\n", 5, hello); 
     return 0; 
} 

प्रिंटों:

message: 'Hel' 
message: 'Hel' 
message: 'Hello' 
3

प्रिंट पहले चार अक्षर:

printf("%.4s\n", "A string that is more than 8 chars");

अधिक जानकारी के लिए this link देखें (.precision -section जांच)

0

C++ में, मैं इस तरह से यह कार्य करें:

char *buffer = "My house is nice"; 
string showMsgStr(buffer, buffer + 5); 
std::cout << showMsgStr << std::endl; 

कृपया ध्यान दें यह सुरक्षित है क्योंकि जब दूसरा तर्क गुजर रहा जा सकते हैं नहीं है स्ट्रिंग के आकार से परे और मेमोरी एक्सेस उल्लंघन उत्पन्न करें। इससे बचने के लिए आपको अपनी खुद की जांच लागू करनी होगी।

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

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