2011-08-13 13 views
5

मैं अपने पहले सी ++ एप्लिकेशन के निर्माण की प्रक्रिया में हूं और इस चरण में भरोसा करने के लिए एक कुशल सी ++ पुस्तकालयों का चयन कर रहा हूं, यह डिजाइन विचारों में से एक है जिसे मैं देख रहा हूं।कौन सा कुशल है, itoa या sprintf?

परिणामस्वरूप मैं एक पूर्णांक प्रकार को स्ट्रिंग में परिवर्तित करना चाहता हूं और उपयोग करना है या नहीं;

sprintf(string, "%d", x); 

या

पूर्णांक एएससीआई को

itoa(x, string); 

किसी को भी बता सकते हैं जो इन मार्ग से एक कुशल है और संभवतः क्यों?

धन्यवाद।

+5

क्या 'istringstream' के बारे में या' बढ़ावा देने :: lexical_cast': आप अभ्यावेदन दशमलव में आप यह कर सकते हैं के अलावा अन्य चाहते हैं? यह सब के बाद सी ++ है। – pmr

+3

पूर्णांक स्वरूपण वास्तव में आपके आवेदन की बाधा होगी? –

+1

@ केरेक एसबी इस चरण में हर छोटी गिनती। – Bitmap

उत्तर

10

इनमें से किसी का भी उपयोग न करें। std::stringstream और इसी तरह का उपयोग करें।

std::stringstream ss; 
ss << x; 
ss.str(); // Access the std::string 

किसी भी तरह से, यह काफी संभावना नहीं है कि स्ट्रिंग में कनवर्ट करने अपने आवेदन की निष्पादन समय का एक महत्वपूर्ण हिस्सा हो जाएगा।

+0

डाउनवॉटर: टिप्पणी करने की देखभाल? –

+0

यह मैं नहीं हूं, लेकिन मुझे लगता है कि नीचे वोट हो सकता है क्योंकि यह उत्तर मूल प्रश्न का उत्तर नहीं देता है। – legends2k

+1

'स्ट्रिंगस्ट्रीम' बेहद धीमी है, यह कुछ अनुप्रयोगों में महत्वपूर्ण हो सकता है (उदाहरण के लिए एचएफटी व्यापार में), यह भी मौजूदा 'char * 'बफर में कनवर्ट करने की अनुमति नहीं देता है। – javapowered

14

वे दोनों कुशल हैं। यह शायद यह अधिक प्रासंगिक है कि itoa() सी ++ मानक का हिस्सा नहीं है, और यह कई सामान्य रनटाइम में उपलब्ध नहीं है। (विशेष रूप से, यह libstdc++ का हिस्सा नहीं है, इसलिए यह मैक ओएस एक्स या लिनक्स पर उपलब्ध नहीं है।)

0

एक शुद्ध एल्गोरिथ्म दृष्टिकोण बहस कर सकते हैं कि itoa के बाद से sprintf प्रारूप वर्णनकर्ता स्ट्रिंग पार्स करने की अतिरिक्त लागत है तेजी से होगा से। हालांकि एक कार्यान्वयन में दो कार्यों की लागत को बेंचमार्क किए बिना, एक गैर-तुच्छ काम के भार के साथ, कोई भी सुनिश्चित नहीं हो सकता है।

यह भी सेब की तुलना में सेब नहीं है क्योंकि दोनों कार्य बराबर नहीं हैं। sprintfitoa से अधिक प्रारूपण कर सकता है, इस तथ्य के अलावा कि पूर्व मानक कार्य है जबकि बाद वाला नहीं है।

एक तरफ : आप सी ++ 11 का उपयोग कर सकते हैं, तो आप to_string जो आपको एक std::string रिटर्न उपयोग कर सकते हैं।

int i = 1234; 
std::stringstream ss; 
ss << std::hex << i;  // hexadecimal 
ss << std::oct << i;  // octal 
ss << std::dec << i;  // decimal 

std::bitset<sizeof(int) * std::numeric_limits<unsigned char>::digits> b(i); 
ss << b;     // binary 

std::string str = ss.str(); 
संबंधित मुद्दे