तुलना चार्ट
तुलना के लिए आधार | चरित्र सरणी | तार |
---|---|---|
बुनियादी | चरित्र सरणी, वर्णों का संग्रह है, वर्ण डेटा प्रकार का। | स्ट्रिंग वर्ग है और स्ट्रिंग के चर वर्ग "स्ट्रिंग" का उद्देश्य हैं। |
वाक्य - विन्यास | char array_name [आकार]; | string string_name; |
इंडेक्सिंग | एक चरित्र सरणी में एक व्यक्तिगत चरित्र को सरणी में इसके सूचकांक द्वारा पहुँचा जा सकता है। | स्ट्रिंग में विशेष वर्ण को "string_name.charAt (इंडेक्स)" फ़ंक्शन द्वारा एक्सेस किया जा सकता है। |
डाटा प्रकार | एक वर्ण सरणी एक डेटाटाइप को परिभाषित नहीं करता है। | एक स्ट्रिंग C ++ में डेटाटाइप को परिभाषित करता है। |
ऑपरेटर्स | C ++ में ऑपरेटर्स को कैरेक्टर ऐरे पर नहीं लगाया जा सकता है। | आप स्ट्रिंग पर मानक C ++ ऑपरेटर लागू कर सकते हैं। |
सीमा | सरणी की सीमाएं आसानी से खत्म हो जाती हैं। | सीमाएं ओवररन नहीं होंगी। |
पहुंच | तेजी से पहुँच। | धीरे-धीरे पहुंचना। |
चरित्र सरणी की परिभाषा
एक चरित्र सरणी "चार" डेटाटाइप के चर का एक संग्रह है; यह एक आयामी आयामी या दो आयामी सरणी हो सकता है। इसे "शून्य समाप्त स्ट्रिंग" भी कहा जाता है। एक वर्ण सरणी वर्णों का एक क्रम है जो लगातार मेमोरी पतों में संग्रहीत होता है। एक चरित्र सरणी में, किसी विशेष वर्ण को उसके सूचकांक द्वारा पहुँचा जा सकता है। एक "अशक्त चरित्र" वर्ण सरणी को समाप्त करता है।
चलो चरित्र सरणी का एक उदाहरण लेते हैं: -
char name [] = {'A', 'j', 'a', 'y', '\ 0'}; या चार नाम [] = "अजय";
यहां, "चार" एक चरित्र डेटा प्रकार है, "नाम" वर्ण सरणी का एक चर नाम है। मैंने चरित्र सरणी को आरंभ करने के दो तरीके दिखाए थे। पहली विधि में, नल स्पष्ट रूप से उल्लिखित है और दूसरी विधि में, संकलक स्वतः नल को सम्मिलित करता है।
स्ट्रिंग का अंत हमेशा एक अशक्त चरित्र होता है; यह वर्ण सरणी का समाप्ति वर्ण है। एक चरित्र सरणी एक अंतर्निहित डेटा प्रकार नहीं है; हम इसे घोषित करके वर्ण सरणी बनाते हैं। आप किसी वर्ण सरणी पर मानक ऑपरेटर लागू नहीं कर सकते। कैरेक्टर एरे पर काम करने के लिए कुछ बिल्ट-इन फंक्शन हैं जैसे, (strlen (), strlwr (), strupr (), strcat ()। जैसा कि मानक ऑपरेटरों को किसी वर्ण सरणी पर लागू नहीं किया जा सकता है, वे किसी भी अभिव्यक्ति में भाग नहीं ले सकते हैं।
एक चरित्र सरणी के लिए चरित्र सूचक भी बनाया जा सकता है।
आइए इसे एक उदाहरण से समझते हैं।
char s1 [] = "हैलो"; char s2 [] = "सर"; s1 = s1 + s2; // त्रुटि ऑपरेटरों को s2 = s1 लागू नहीं किया जा सकता है; // त्रुटि चरित्र सूचक चार * s = "सुबह"; चार * पी; पी = रों; // कार्यान्वित
ऊपर के उदाहरण में, हमने दो वर्ण सरणी s1, s2 और दो वर्ण बिंदु s और p घोषित किए थे। चरित्र सरणी s1 और s2 आरंभिक हैं, हम देख सकते हैं कि न तो अतिरिक्त ऑपरेटर (+) और न ही असाइनमेंट ऑपरेटर वर्ण सरणी पर काम करता है। लेकिन एक चरित्र सूचक को दूसरे वर्ण सूचक को सौंपा जा सकता है।
याद रखें कि एक बार चरित्र सरणी आरंभीकृत हो जाने के बाद इसे फिर से वर्ण के दूसरे सेट में आरंभ नहीं किया जा सकता है। C ++ में स्ट्रिंग की तुलना में कैरेक्टर ऐरे या नल टर्मिनेटेड स्ट्रिंग की पहुंच तेज है।
स्ट्रिंग की परिभाषा
एक स्ट्रिंग C ++ का अंतर्निहित डेटा प्रकार नहीं है। यह "स्ट्रिंग" प्रकार का एक क्लास ऑब्जेक्ट है। जैसे C ++ में क्लास बनाना एक "टाइप" बनाने जैसा है। वर्ग "स्ट्रिंग" C ++ लाइब्रेरी का एक हिस्सा है। यह एक पूरे के रूप में चरित्र या चरित्र सरणी का सेट रखता है। एक मानक स्ट्रिंग वर्ग के विकास के पीछे तीन कारण हैं।
- पहले "स्थिरता" है, चरित्र सरणियाँ अपने आप में डेटा प्रकार नहीं हैं।
- दूसरा "सुविधा" है, आप एक चरित्र सरणी पर मानक ऑपरेटरों का उपयोग नहीं कर सकते हैं।
- तीसरा "सुरक्षा" है, सरणी सीमाएं आसानी से उग आई हैं।
आइए हम एक उदाहरण के साथ तार को समझते हैं।
स्ट्रिंग s1; s1 = "हैलो"; स्ट्रिंग s2 ("गुड मॉर्निंग"); स्ट्रिंग s3 = "हेनेरी"; स्ट्रिंग s4;
उपरोक्त घोषणा में, चार स्ट्रिंग चर या ऑब्जेक्ट (s1, s2, s3, s4) घोषित किए जाते हैं। उपरोक्त घोषणा में, मैंने स्ट्रिंग को शुरू करने के तीन तरीके दिखाए थे। स्ट्रिंग s1 घोषित किया गया है और फिर अलग से इनिशियलाइज़ किया गया है। स्ट्रिंग s2 का निर्माण कक्षा "स्ट्रिंग" के निर्माता द्वारा किया गया है। स्ट्रिंग s3 को सामान्य डेटा प्रकार के रूप में इसकी घोषणा के समय आरंभीकृत किया जाता है। हम मानक ऑपरेटर को स्ट्रिंग चर पर लागू कर सकते हैं।
s4 = s1; // एक स्ट्रिंग ऑब्जेक्ट को अन्य s4 = s1 + s2 में असाइन करना; // दो तार जोड़ने और तीसरे तार में परिणाम को जमा करना अगर (s3> s2) // दो तार तार s5 (s1) की तुलना करना; मौजूदा स्ट्रिंग ऑब्जेक्ट का उपयोग करके एक नया स्ट्रिंग ऑब्जेक्ट बनाना
उपरोक्त कोड में, विभिन्न ऑपरेटरों को एक स्ट्रिंग पर लागू किया जाता है और विभिन्न ऑपरेशन किए जाते हैं। पहला कथन एक स्ट्रिंग ऑब्जेक्ट को दूसरे स्ट्रिंग ऑब्जेक्ट पर कॉपी करता है। दूसरे स्टेटमेंट में, दो स्ट्रिंग को कंसेंट किया जाता है और तीसरे स्ट्रिंग में स्टोर किया जाता है। तीसरे कथन में, दो तारों की तुलना की गई है। चौथे कथन में, पहले से मौजूद स्ट्रिंग ऑब्जेक्ट का उपयोग करके एक नया स्ट्रिंग ऑब्जेक्ट बनाया गया है।
एक चरित्र सरणी या अशक्त समाप्त स्ट्रिंग की तुलना में स्ट्रिंग तक पहुंच धीमी है।
चरित्र सरणी और स्ट्रिंग के बीच महत्वपूर्ण अंतर
- एक वर्ण सरणी चर का एक संग्रह है जो वर्ण डेटाटाइप के हैं। स्ट्रिंग एक ऐसा वर्ग है जिसे स्ट्रिंग्स घोषित करने के लिए त्वरित किया जाता है।
- इंडेक्स वैल्यू का उपयोग कर आप किसी कैरेक्टर ऐरे से कैरेक्टर को एक्सेस कर सकते हैं। दूसरी ओर, यदि आप किसी विशेष वर्ण को स्ट्रिंग में एक्सेस करना चाहते हैं, तो आप इसे फ़ंक्शन स्ट्रिंग के_name.charAt (इंडेक्स) द्वारा एक्सेस कर सकते हैं।
- एक सरणी एक डेटाटाइप नहीं है उसी तरह एक चरित्र भी एक डेटाटाइप नहीं है। दूसरी ओर, स्ट्रिंग एक संदर्भ प्रकार के रूप में एक वर्ग कार्य है इसलिए, यह कहा जा सकता है कि स्ट्रिंग एक डेटा प्रकार है।
- आप किसी भी ऑपरेटर को कैरेक्टर एरे पर लागू नहीं कर सकते हैं, जबकि आप स्ट्रींग पर ऑपरेटर लगा सकते हैं।
- एरे कैरेक्टर एरे होने के कारण एक निश्चित लंबाई होती है और इसकी सीमाओं को आसानी से पार किया जा सकता है। जहां स्ट्रिंग की कोई सीमा नहीं है।
- ऐरे तत्वों को एक सन्निहित स्मृति स्थान में संग्रहीत किया जाता है ताकि स्ट्रिंग चर की तुलना में तेजी से पहुँचा जा सके।
निष्कर्ष:
चरित्र सरणी पर संचालित करने में असमर्थता ने मानक स्ट्रिंग वर्ग के विकास को बढ़ाया।