2010-03-21 10 views
10

क्या यह C++ में cstdio, cstring, cmath का उपयोग करने की अनुशंसा की जाती है? मैं एक प्रोग्राम लिख रहा था जिसके लिए पाउ, स्ट्रेल और स्प्रिंटफ की आवश्यकता थी ... इसके लिए मैं इन 3 शीर्षकों को शामिल करने का एकमात्र तरीका था। क्या ऐसा करने के लिए एक बेहतर सी ++ तरीका है?क्या सी ++ में सीएसडीओ, सीस्ट्रिंग, सेमीथ इत्यादि का उपयोग करने की सिफारिश की जाती है?

धन्यवाद

+1

मुझे लगता है जैसे आप सी लिख रहे हैं, बस एक सी ++ कंपाइलर का उपयोग कर। यदि आप सी ++ का उपयोग कर रहे हैं तो मैं तर्क दूंगा कि आपको स्प्रिंटफ के बजाय स्ट्रिंगस्ट्रीम के साथ मानक लाइब्रेरी की आईओ मैनिपुएशन फीचर्स का उपयोग करना चाहिए, और सी-स्टाइल स्ट्रिंग्स के बजाय सी ++ स्ट्रिंग क्लास का उपयोग करना चाहिए। आपको "आवश्यक" strlen() और sprintf() की आवश्यकता है क्योंकि आप सी तारों से निपट रहे हैं। –

उत्तर

5

है सही तरीका।

+0

यकीन नहीं है कि मैं इससे सहमत हूं :) ऐसा लगता है जैसे वह सी-स्टाइल स्ट्रिंग से निपट रहा है, सी ++ तार नहीं। मेरे पास सवाल यह है कि क्या वह स्प्रिंटफ के बजाय सी ++ की आईओ मैनिपुलेशन सुविधाओं के साथ एनएलएल टर्मिनेटेड स्ट्रिंग्स के बजाय std :: basic_string का उपयोग नहीं कर रहा है? चीयर्स :) –

10

आप sprintf के बजाय std::stringstream और std::string का उपयोग सी-शैली तारों के बजाय कर सकते हैं। लेकिन सी ++ गणित कार्यों के लिए सी पुस्तकालय का उपयोग करता है।

सी ++ गणित कार्यों के लिए कुछ सुविधाजनक भार के (जैसे आप नाव के लिए exp() का उपयोग कर सकते हैं।) वे न केवल <cmath> में हालांकि <math.h> में उपलब्ध हैं कहते हैं।

+0

string.h –

+2

में sprintf के अलावा बहुत उपयोगी चीजें हैं लेकिन यह char * स्ट्रिंग्स का उपयोग करने के लिए है। यदि आप सी ++ की स्ट्रिंग क्लास पर स्विच करते हैं तो आप इसे स्ट्रिंग हेडर में प्राप्त करते हैं। (ओके, कभी-कभी आपको एल्गोरिदम की भी आवश्यकता हो सकती है) और यदि संभव हो तो char * से C++ की स्ट्रिंग का उपयोग करना पसंद किया जाता है। – Shiroko

+0

string.h में कुछ गैर-स्ट्रिंग फ़ंक्शंस भी memcpy और memset की तरह हैं। – dan04

3

गणित कार्यों के लिए, < सेमीथ > सही तरीका है; हालांकि, I/O के लिए, आपको <iostream>, <sstream>, <fstream>, और दोस्तों का उपयोग करना चाहिए। स्ट्रिंग मैनिपुलेशन के लिए, < स्ट्रिंग > जाने का तरीका है।

+0

iostream scanf/printf (acm olympiads अनुभव) – osgx

+0

@osgx से बहुत धीमी है, मुझे यकीन नहीं है कि मैं इसे खरीदता हूं। स्कैनफ/प्रिंटफ को iostreams की तुलना में बहुत अधिक स्वरूपण से निपटना होगा। आपने किस कार्यान्वयन का उपयोग किया था? Iostream का कोई भी उचित कार्यान्वयन कम से कम तेज़ होना चाहिए। हमारी olymp समस्या पर –

+0

'sync_with_stdio' के साथ था। जीसीसी से libstdC++ की iostream यह लिनक्स में सक्षम है। Iostream की गति को बंद करने के बाद इसे बढ़ा दिया – osgx

1

सेमीथ वास्तव में सी ++ में नहीं छोड़ा गया है, क्योंकि वास्तव में उन्हें बेहतर बनाने के लिए कुछ भी नहीं है। हालांकि, स्ट्रिंगस्ट्रीम/iostreams cstring और cstdio lot से बहुत दूर हैं।

यदि आपके पास सी स्ट्रिंग है, तो आप आसानी से एक std :: स्ट्रिंग में परिवर्तित कर सकते हैं, और फिर से उसी के लिए। यदि आप तारों का उपयोग कर रहे हैं, तो हमेशा strlen, sprintf, और उस पर C++ स्ट्रिंग लाइब्रेरी का उपयोग करें।

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

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