2013-08-25 5 views
6

मैं सी ++ प्राइमर में एक अभ्यास कर रहा हूं और मूल रूप से मैं इनपुट टेक्स्ट में स्वरों की संख्या को गिनने के लिए स्विच स्टेटमेंट का उपयोग कर रहा हूं।यह जांचना कि कोई char एक नई लाइन है

मैं थोड़ी देर लूप का उपयोग कर पाठ इनपुट करता हूं।

while(cin >> ch) 

और मामलों के साथ आगे बढ़ना, ए, ई, मैं, ओ, यू, संबंधित मामलों के लिए एक पूर्णांक चर incrementing। अब प्रश्न के अगले भाग में रिक्त स्थान, टैब और न्यूलाइन भी गिना जाता है।

मैं '\ t' और '\ n' का उपयोग कर

case ' ': 

और इसके आगे कर की कोशिश की। लेकिन ऐसा लगता है कि यह इन मामलों की गणना नहीं करता है। मैंने बस एक डिफ़ॉल्ट का उपयोग करने और एक और कथन का उपयोग करने का प्रयास किया

default: 
    if(ch == ' ') 
     ++space; 

आदि लेकिन यह आगे नहीं बढ़ता है। मैंने '', '\ t', '\ n' के पूर्णांक मानों को डालने का भी प्रयास किया। मुझसे यहां क्या गलत हो रहा है? साथ ही, मुझे पता है कि अगर मैं जारीस्थान का उपयोग करता हूं() मैं संयुक्त कुल गणना कर सकता हूं लेकिन मुझे प्रत्येक व्यक्ति को व्यक्तिगत रूप से गणना करने की आवश्यकता है। मुझे यकीन नहीं है कि समानता परीक्षण नौकरी क्यों नहीं करेगा।

उत्तर

12

डिफ़ॉल्ट रूप से, धाराओं से स्वरूपित इनपुट अग्रणी व्हाइटस्पेस छोड़ देता है।

std::cin >> std::noskipws; // disables skipping of leading whitespace 
char c; 
while (std::cin.get(c)) { // doesn't skip whitespace anyway 
    ... 
} 
+0

क्या सफेद जगहों में पढ़ने का कोई आसान तरीका है? पुस्तक में इस बिंदु पर आपके द्वारा उल्लिखित तकनीक को कवर नहीं किया गया है। एक आसान समाधान होना चाहिए। – Ares

+0

@ कॉमरेड: आप 'std :: getline (std :: cin, str) 'का उपयोग कर सकते हैं, जहां' str' एक' std :: string' है। यह रिक्त स्थान पढ़ेगा लेकिन सफल कॉलों की संख्या 'std :: getline() 'पर नई कॉलों को अलग से गिना जाना चाहिए (हालांकि अंतिम पंक्ति को एक नई लाइन के साथ समाप्त होने पर गलत परिणाम मिल सकता है)। आप 'chard (istreambuf_iterator '' char's के अनुक्रम पर फिर से शुरू करने के लिए 'std :: istreambuf_iterator ' भी कर सकते हैं (लेकिन शायद मुझे सबसे तेज़ दृष्टिकोण है) लेकिन मुझे संदेह है कि यह पुस्तक में शामिल है। –

+0

भाग जो कि स्वरों की गणना करता है, मुझे दो के लिए एक मामले का उपयोग करके लोअर केस और ऊपरी केस स्वर दोनों की गणना करने की आवश्यकता होती है। तो स्विच स्टेटमेंट में मैं वास्तव में स्विच (टोलॉवर (सी)) है। अगर मैं getline (cin, str) का उपयोग करता हूं जहां str एक स्ट्रिंग है, तो क्या कोई स्ट्रिंग के लिए उपयोग करने के लिए टोलॉवर() के लिए एक समान कार्य है? – Ares

1

रूप डिटमार से कहा, सफेद रिक्त स्थान डिफ़ॉल्ट रूप से छोड़ दिया जाता है: आप कार्य करता है जो रिक्त स्थान को छोड़ नहीं होगा से एक का उपयोग प्रमुख व्हाइटस्पेस दोनों में से किसी को निष्क्रिय लंघन करने की जरूरत है या। आप सफेद स्पेस वर्णों के बजाय अपना स्वयं का स्ट्रिंग डिलीमीटर प्रदान करने के लिए cin.getline() का उपयोग कर सकते हैं। मैं कहूंगा कि यह cin.get() का उपयोग करने की तुलना में इनपुट पढ़ने का एक आम तरीका है।

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