2012-10-10 36 views
5

मैं इस स्ट्रिंग है:सी ++ सबस्ट्रिंग लौटने गलत परिणाम

std::string date = "20121020"; 

मैं कर रहा हूँ:

std::cout << "** Date: " << date << "\n"; 
std::cout << "Year: " << date.substr(0,4) << "\n"; 
std::cout << "Month: " << date.substr(4,6) << "\n"; 
std::cout << "Day: " << date.substr(6,8) << "\n"; 

लेकिन im हो रही:

** Date: 20121020 
Year: 2012 
Month: 1020 
Day: 20 

सूचना है कि महीने के 10 होना चाहिए, 1020 नहीं। स्थिति सही हैं, सब कुछ करने की कोशिश की, यह असफल रहा है?

+12

दूसरा तर्क सबस्ट्रिंग की लंबाई है, अंत सूचकांक नहीं। –

+5

'std :: string date = 20121020' वाक्य रचनात्मक रूप से गलत है। क्या आपका मतलब 'std :: string date =" 20121020 "' था? –

+2

@DanielFischer, यह भी एक उत्तर बना सकता है, क्योंकि यह वास्तव में समस्या है। – Chad

उत्तर

14
std::cout << "Month: " << date.substr(4,6) << "\n"; 

दूसरा तर्क गलत है। आप निर्दिष्ट कर रहे हैं, "मुझे स्थिति 4 से शुरू होने पर वर्णों के सबस्ट्रिंग के रूप में दें।"

आप शायद चाहते हैं:

std::cout << "Month: " << date.substr(4,2) << "\n"; 
+0

धन्यवाद, यह काम करता है, मैंने सोचा कि सबस्ट्रेट पाइथन स्लाइस की तरह होगा, और आपको पदों को पार करना होगा :) धन्यवाद फिर से – jviotti

+1

@ जुआनक्रूज़ वीओटी: पढ़ने की तरह कुछ भी नहीं है प्रलेखन ... –

3

इस प्रयास करें:

std::cout << "** Date: " << date << "\n"; 
std::cout << "Year: " << date.substr(0,4) << "\n"; 
std::cout << "Month: " << date.substr(4,2) << "\n"; 
std::cout << "Day: " << date.substr(6,2) << "\n"; 

मेरा मानना ​​है कि substr तर्कों के रूप शुरू करने और लंबाई लेता है।

+0

यह गलती थी, मैंने सोचा था कि सबस्ट्रेट सिंटैक्स पाइथन स्लाइसिंग की तरह होगा, और तर्क जहां स्ट्रिंग के दोनों पदों, धन्यवाद। – jviotti

-1

http://www.cplusplus.com/reference/string/string/substr/

स्ट्रिंग substr (size_t स्थिति = 0, size_t एन = एनपीओ) स्थिरांक;

pos वर्तमान स्ट्रिंग ऑब्जेक्ट में एक वर्ण की स्थिति को सबस्ट्रिंग के लिए प्रारंभिक वर्ण के रूप में उपयोग करने के लिए उपयोग किया जाना चाहिए। यदि पारित स्थिति स्ट्रिंग के अंत से पहले है, तो out_of_range अपवाद फेंक दिया जाता है।

एन सबस्ट्रिंग की लंबाई। यदि यह मान वर्तमान स्ट्रिंग सामग्री के अंत में फैलाने के लिए सबस्ट्रिंग को बनाएगा, तो केवल उन वर्णों को स्ट्रिंग के अंत तक उपयोग किया जाता है। npos एक स्थिर सदस्य निरंतर मान है जो आकार sizet के तत्व के लिए सबसे बड़ा संभव मान है, इसलिए, जब यह मान उपयोग किया जाता है, तो पॉज़ और स्ट्रिंग के अंत के बीच के सभी वर्ण प्रारंभिक सबस्ट्रिंग के रूप में उपयोग किए जाते हैं।

तो कोड में आपकी गलती यह है कि आपने उम्मीद की है कि दूसरा पैरामीटर सबस्ट्रिंग की लंबाई के बजाय अंतिम चार की स्थिति हो।

+0

यदि आप दस्तावेज़ीकरण उद्धरण देते हैं, तो कृपया cplusplus.com के बजाय en.cppreference.com उद्धरण दें।उत्तरार्द्ध असंगतता और गलत जानकारी –

+0

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