जवाबों:
मूल तरीका है:
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 ("Here are the first 8 chars: %*.*s\n",
8, 8, "A string that is more than 8 chars");
यह "% 8.8s" अंकन के अनुरूप भी है, लेकिन फिर से आप रनटाइम पर न्यूनतम और अधिकतम लंबाई निर्दिष्ट करने की अनुमति देता है - जैसे परिदृश्य में अधिक वास्तविक रूप से:
printf("Data: %*.*s Other info: %d\n", minlen, maxlen, string, info);
POSIX विनिर्देशन printf()
इन तंत्रों को परिभाषित करता है।
-
पूर्ण रूप से निर्दिष्ट लंबाई तक बनाने के लिए रिक्त पैडेड होगा (बाईं ओर जब तक आप जोड़ते हैं )।
printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
% 8s न्यूनतम 8 वर्णों की चौड़ाई निर्दिष्ट करेगा। आप 8 पर कम करना चाहते हैं, इसलिए% .8 का उपयोग करें।
यदि आप हमेशा 8 अक्षर प्रिंट करना चाहते हैं तो आप% 8.8 का उपयोग कर सकते हैं
वर्णों की एक निश्चित राशि निर्दिष्ट करने के अलावा, आप यह भी उपयोग कर सकते हैं *
जिसका अर्थ है कि 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'
printf
आप का उपयोग कर सकते हैं
printf("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
यदि आप C ++ का उपयोग कर रहे हैं, तो आप STL का उपयोग करके समान परिणाम प्राप्त कर सकते हैं:
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;
ostream_iterator<char>(cout)
! इसके बजाय, उपयोग करें ostreambuf_iterator<char>(cout)
! प्रदर्शन में अंतर बल्कि बड़ा होना चाहिए।
std::cout.write(s.data(), 8)
:। या आधुनिक C ++, std::cout << std::string_view{s.data(), 8}
।
C ++ में यह आसान है।
std::copy(someStr.c_str(), someStr.c_str()+n, std::ostream_iterator<char>(std::cout, ""));
संपादित करें: यह स्ट्रिंग पुनरावृत्तियों के साथ इसका उपयोग करने के लिए सुरक्षित है, इसलिए आप अंत से भागते नहीं हैं। मुझे यकीन नहीं है कि प्रिंटफ और स्ट्रिंग के साथ क्या होता है जो बहुत कम हैं, लेकिन मुझे लगता है कि यह सुरक्षित हो सकता है।
std::cout << someStr.substr(0,8);
कहीं अधिक स्पष्ट है।
C ++ में, मैं इसे इस तरह से करता हूं:
char *buffer = "My house is nice";
string showMsgStr(buffer, buffer + 5);
std::cout << showMsgStr << std::endl;
कृपया ध्यान दें कि यह सुरक्षित नहीं है क्योंकि दूसरा तर्क पारित करते समय मैं स्ट्रिंग के आकार से परे जा सकता हूं और मेमोरी एक्सेस उल्लंघन उत्पन्न कर सकता हूं। इससे बचने के लिए आपको अपनी जांच लागू करनी होगी।