मुझे एक समस्या है जो sscanf हल करता है (स्ट्रिंग से चीजों को निकालने)। मुझे sscanf पसंद नहीं है हालांकि यह टाइप-सुरक्षित नहीं है और पुराना और भयानक है। मैं चालाक होना चाहता हूं और सी ++ मानक पुस्तकालय के कुछ और आधुनिक भागों का उपयोग करना चाहता हूं। इसके बजाय मुझे क्या उपयोग करना चाहिए?एसएसकेएनएफ के बजाय मुझे क्या उपयोग करना चाहिए?
उत्तर
मुझे लगता है कि अन्य उत्तर बात को अनदेखा कर रहे हैं। प्रश्न I/O के बारे में नहीं है, यह एक स्ट्रिंग से डेटा निकालने के बारे में है।
कोशिश stringstream:
#include <sstream>
...
std::stringstream s("123 456 789");
int a, b, c;
s >> a >> b >> c;
सी कैसे नहीं है, उदाहरण के लिए स्ट्रिंग "123 456" थी? – unludo
@unludo: उस स्थिति में, 'सी' को बिना संहिताबद्ध किया जाएगा। आप 'c' को डिफ़ॉल्ट मान के साथ प्रारंभ कर सकते हैं, या आपको अधिक परिष्कृत पार्सिंग की आवश्यकता हो सकती है। एक टोकनेज़र शायद काम करेगा। –
सी ++ 11 के रूप में, 'c' को' 0' पर रीसेट कर दिया जाएगा, और इससे पहले मुझे विश्वास है कि इसके बाद विफलता मान को परिभाषित किया गया था। वैसे भी, यह जांचने के लिए कि क्या 'सी' धारा राज्य का उपयोग करता है (सुविधा के लिए, 'ऑपरेटर बूल()' से): 'अगर (एस >> ए >> बी) यदि (एस >> सी) abc_there(); अन्य ab_there(); else didnt_have_a_and_b(); '। –
fgets या strtol
आप sstream
शामिल करते हैं तो आप stringstream वर्गों है कि तार के लिए धाराओं प्रदान करते हैं जो कि तुम क्या जरूरत है का लाभ उठा सकेंगे। Roguewave, कुछ अच्छी examples on how to use it.
सबसे नौकरियों मानक धाराओं काम पूरी तरह से करते है
std::string data = "AraK 22 4.0";
std::stringstream convertor(data);
std::string name;
int age;
double gpa;
convertor >> name >> age >> gpa;
if(convertor.fail() == true)
{
// if the data string is not well-formatted do what ever you want here
}
आप और अधिक जटिल पार्स के लिए और अधिक शक्तिशाली उपकरण की जरूरत है, तो आप बूस्ट से Regex या यहाँ तक कि आत्मा विचार कर सकते हैं।
यदि आप वास्तव में धाराओं का उपयोग नहीं करना चाहते हैं (यह पठनीयता की वजह से अच्छा है), तो आप स्ट्रिंगप्रिंटफ़ का उपयोग कर सकते हैं।
https://github.com/facebook/folly/blob/master/folly/String.h#L165
कोड का अच्छा सा हिस्सा (मैं लगभग पहले से ही कुछ उपयोग कर रहा हूं), हालांकि यह 'sscanf' की बजाय' printf' के प्रतिस्थापन है। –
- 1. पर्ल में printf के बजाय मुझे क्या उपयोग करना चाहिए?
- 2. com.google.appengine.repackaged * के बजाय मुझे क्या उपयोग करना चाहिए?
- 3. लोडविथपार्टियलनाम() के बजाय मुझे क्या उपयोग करना चाहिए?
- 4. क्या मुझे MySQL के बजाय NoSQL का उपयोग करना चाहिए?
- 5. क्या मुझे TFilename की बजाय स्ट्रिंग का उपयोग करना चाहिए?
- 6. मुझे fprintf के बजाय fputs का उपयोग कब करना चाहिए?
- 7. मुझे UIImagePickerControllerSourceTypePhotoLibrary का उपयोग UIImagePickerControllerSourceTypeSavedPhotosAlbum के बजाय कब करना चाहिए?
- 8. मुझे इनलाइन के बजाय __forceinline का उपयोग कब करना चाहिए?
- 9. मुझे हैश के बजाय ओपनस्ट्रक्चर का उपयोग कब करना चाहिए?
- 10. मुझे जीडब्ल्यूटी के बजाय jQuery का उपयोग क्यों करना चाहिए?
- 11. जब मुझे कुछ आइटम चाहिए, तो क्या मुझे इसके बजाय "int id" का उपयोग करना चाहिए?
- 12. एसएसकेएनएफ
- 13. एसएसकेएनएफ
- 14. मुझे क्या करना चाहिए?
- 15. मुझे क्या gacutil.exe का उपयोग करना चाहिए?
- 16. क्या मुझे HttpRuntime.Cache का उपयोग करना चाहिए?
- 17. क्या मुझे jQuery.each() का उपयोग करना चाहिए?
- 18. सी # लॉगिंग। मुझे क्या उपयोग करना चाहिए?
- 19. क्या मुझे jQuery.inArray() का उपयोग करना चाहिए?
- 20. क्या मुझे बूटस्ट्रैप का उपयोग करना चाहिए?
- 21. monodroid या monotouch में कॉन्फ़िगरेशन तारों के लिए app.config के बजाय मुझे क्या उपयोग करना चाहिए?
- 22. मुझे GET के बजाय डेटा पोस्ट क्यों करना चाहिए?
- 23. क्या मुझे getString() के बजाय जेडीबीसी getNString() का उपयोग करना चाहिए?
- 24. क्या मुझे बुनियादी सी संख्या प्रकारों के बजाय NSNumber का उपयोग करना चाहिए?
- 25. क्या मुझे हमेशा रचनाकारों के बजाय स्थैतिक फैक्ट्री विधियों का उपयोग करना चाहिए?
- 26. phtml क्या है, और मुझे .php के बजाय .phtml एक्सटेंशन का उपयोग कब करना चाहिए?
- 27. आईओएस 5.1 में बहिष्कृत UISegmentedControlStyleBezeled के बजाय मुझे क्या उपयोग करना चाहिए?
- 28. क्या मुझे डबल या फ्लोट का उपयोग करना चाहिए?
- 29. क्या एक्ससीबी उत्पादन के उपयोग के लिए तैयार है? क्या मुझे इसके बजाय एक्सलिब का उपयोग करना चाहिए?
- 30. मुझे glbindAttribLocation का उपयोग क्यों करना चाहिए?
"चालाक" होने के लिए क्यों की कोशिश:
आप मूर्खता में इसके कार्यान्वयन मिल सकती है? –
उदाहरण के लिए उन्होंने कहा कि, sscanf टाइप-सुरक्षित नहीं है। – jalf
@ कालेब पेडरसन: कई अंग्रेजी बोलने वालों के लिए, "चालाक" का अर्थ केवल "स्मार्ट" हो सकता है और इसका कभी-कभी नकारात्मक अर्थ नहीं होता है। ध्यान दें कि बेन हैमर ब्रिटेन से हैं। – Naaff