मुझे प्रतीक-द्वारा-प्रतीक पढ़ने की आवश्यकता है। लेकिन मुझे नहीं पता कि इनपुट के अंत तक कैसे पढ़ा जाए। जैसा कि उदाहरण परीक्षण प्रणाली >> कुछ अनिवार्य एम बार होगा। मुझे सभी पात्रों के प्रतीक-प्रतीक को पढ़ना है। केवल एम बार। यह मेरे द्वारा कैसे हो सकता है?सी ++ सीन चार पढ़ा प्रतीक-द्वारा-प्रतीक
उत्तर
आप स्वरूपित इनपुट चरित्र-दर-चरित्र, ऐसा करने चाहते हैं std::istream &
या इसी प्रकार की फ़ाइल, जैसे std::cin
।
कच्चे बाइट्स (सिंबोस) पढ़ने के लिए, 'cin.read' विधि आमतौर पर अधिक कुशल होती है, कम से कम यह कम फ़ंक्शन कॉल का उपयोग करती है। –
@ थॉमस मैथ्यूज: धन्यवाद, मैंने इसके बारे में भी सोचा - मैंने वैकल्पिक संस्करण भी जोड़ा। –
इस प्रयास करें:
#include <iostream>
using std::cin;
using std::cout;
int main(int argc, char *argv[])
{
char ch;
unsigned m = 10;
while (cin && m--) {
cin.read(&ch, sizeof(ch));
cout << ch;
}
return 0;
}
क्यों कास्ट एक 'char *' 'char *' के लिए? –
यह समाधान * एम * प्रतीकों की मात्रा नहीं पढ़ता है या यह ईओएफ, * एम * बार तक पढ़ने दोहराता नहीं है। –
@ थॉमस मैथ्यू फिक्स्ड। – Sergey
वहाँ एक समय में एक चरित्र को पढ़ने के लिए कई तरीके हैं जब तक आप उन सब को पढ़ा है, और उनमें से कोई जरूरी सबसे अच्छा है।
व्यक्तिगत रूप से, मैं निम्नलिखित कोड के साथ जाना चाहते हैं:
char c;
while (cin.get(c)) {
// Process c here.
}
आप केवल, m
वर्णों को पढ़ने के लिए एक for
पाश उपयोग करने पर विचार करने की जरूरत है:
char c;
for (unsigned int i = 0; i < m && cin.get(c); ++i) {
// Process c here.
}
इस लूप के रूप में लंबे समय तक चलता है क्योंकि दो स्थितियां पूरी होती हैं: (1) m
से कम वर्ण पढ़े गए हैं, और (2) अभी भी पढ़ने के लिए वर्ण हैं।
हालांकि, दोनों समाधानों में कमी है: वे अपेक्षाकृत अक्षम हैं। एक बार में m
वर्णों को पढ़ने के लिए यह अधिक कुशल है।
तो सबसे पहले m
वर्ण स्टोर करने के लिए एक बड़ा पर्याप्त बफर आवंटित और फिर उन्हें पढ़ने के लिए प्रयास: अंतिम पंक्ति
std::vector<char> buffer(m);
cin.read(&m[0], m);
unsigned total_read = cin.gcount();
सूचना - इससे आपको पता होगा कि क्या m
अक्षर वास्तव में पढ़ा जा सकता है।
char c;
while (infile >> c)
{
// process character c
}
आप कच्चे बाइट्स पढ़ने के लिए चाहते हैं, तो ऐसा करते हैं::
char b;
while (infile.get(b))
// while(infile.read(&b, 1) // alternative, compare and profile
{
// process byte b
}
या तो मामले में, infile
होना चाहिए
यह समाधान प्रतीकों की मात्रा को नहीं पढ़ता है या यह ईओएफ, एम बार तक पढ़ने को दोहराता नहीं है। –
@ थॉमस अपडेट देखें। अद्यतन के लिए –
+1, विशेष रूप से 'for' लूप में EOF केस को कवर करना। –
- 1. सीन [सी ++]
- 2. द्विआधारी डेटा में कैसे पढ़ा जाए और हस्ताक्षरित चार (सी ++)
- 3. सी चार से चार *
- 4. सी चार को चार *
- 5. सी चार
- 6. एक न्यूलाइन चरित्र तक व्हाइटस्पेस के साथ सीन कैसे पढ़ा जाए?
- 7. सीन का उपयोग कर उपयोगकर्ता से पूरी लाइन कैसे पढ़ा जाए?
- 8. सी ++: स्ट्रिंग्स/चार *
- 9. चार * सी भाषा
- 10. चार सरणी सी
- 11. मार्शल "चार *" सी #
- 12. सी ++, एक चार सरणी
- 13. एसक्यूएल चार और सी #
- 14. चार हस्ताक्षरित पूर्णांक (सी ++)
- 15. सी - चार सरणी
- 16. सी # में एक चार **
- 17. स्कैनर का उपयोग कर चार द्वारा इनपुट फ़ाइल चार को कैसे पढ़ा जाए?
- 18. सी ++ पढ़ा() - एक सॉकेट से एक ऑफस्ट्रीम
- 19. सी ++ नया/हटाएं और चार *
- 20. सी # स्ट्रिंग के लिए चार और चार सरणी असाइन करें?
- 21. एरलांग में पूर्णांक कैसे पढ़ा जाए?
- 22. चार सरणी वी.एस. चार *
- 23. चार और चार के बीच अंतर [1]
- 24. चार
- 25. चार सरणी बनाम चार सूचक
- 26. चार एनम
- 27. अहस्ताक्षरित चार में कनवर्ट कर चार * *
- 28. सी # ToCharArray चार साथ काम नहीं करता *
- 29. चार मोनो सी # कंपाइलर क्यों हैं?
- 30. सी ++ की तुलना करें चार सरणी स्ट्रिंग
इसे एक स्ट्रिंग में डालने का प्रयास करें। –
क्या आप इनपुट के अंत तक पढ़ रहे हैं, * एम * बार, या आप * एम * प्रतीकों की मात्रा पढ़ रहे हैं? –
या 'आईट्रीम :: get (char * buffer, size_t len, char delimiter)' और 'istream :: read (char * buffer, size_t len) 'में देखें, यदि आप व्हाइटस्पेस और न्यूलाइन सहित सभी बाइट्स चाहते हैं –