सी स्ट्रिंग्स
स्ट्रिंग को एक अशक्त ('\ 0') द्वारा समाप्त वर्णों के एक आयामी सरणी के रूप में परिभाषित किया जा सकता है। वर्ण सरणी या स्ट्रिंग का उपयोग पाठ या वाक्य जैसे पाठ में हेरफेर करने के लिए किया जाता है। सरणी में प्रत्येक वर्ण मेमोरी के एक बाइट पर कब्जा कर लेता है, और अंतिम चरित्र हमेशा 0 होना चाहिए। समाप्ति वर्ण ('\ 0') एक स्ट्रिंग में महत्वपूर्ण है क्योंकि यह पहचानने का एकमात्र तरीका है कि स्ट्रिंग कहां समाप्त होती है। जब हम एक स्ट्रिंग को चार s [10] के रूप में परिभाषित करते हैं, तो वर्ण S [10] को स्मृति में अशक्त के साथ शुरू किया जाता है। सी भाषा में एक स्ट्रिंग घोषित करने के दो तरीके हैं। चार सरणी द्वारा स्ट्रिंग शाब्दिक द्वारा आइए सी भाषा में चार सरणी द्वारा स्ट्रिंग घोषित करने का उदाहरण देखें।
Axar caaIoari[10]={'jae', 'P', 'vai', 'P', 'Ti', 'pai', 'he', 'maIM', 'Pna', 'Ti', '\0'};
जैसा कि हम जानते हैं, सरणी सूचकांक 0 से शुरू होता है, इसलिए इसे नीचे दिए गए आंकड़े के रूप में दर्शाया जाएगा।
स्ट्रिंग की घोषणा करते समय, आकार अनिवार्य नहीं है। इसलिए हम उपरोक्त कोड को नीचे दिए गए अनुसार लिख सकते हैं:
Axar caaIoari[]={'jae', 'P', 'vai', 'P', 'Ti', 'pai', 'he', 'maIM', 'Pna', 'Ti', '\0'};
हम सी भाषा में स्ट्रिंग शाब्दिक द्वारा स्ट्रिंग को भी परिभाषित कर सकते हैं। उदाहरण के लिए:
Axar caaIoari[]="jacavapaDjajamabai";
ऐसे मामले में, '\ 0' को संकलक द्वारा स्ट्रिंग के अंत में जोड़ा जाएगा।
चार सरणी और स्ट्रिंग शाब्दिक के बीच अंतर
चार सरणी और शाब्दिक के बीच दो मुख्य अंतर हैं। हमें अपने द्वारा सरणी के अंत में अशक्त चरित्र '\ 0' जोड़ने की आवश्यकता है, जबकि, यह चरित्र सरणी के मामले में संकलक द्वारा आंतरिक रूप से जोड़ा जाता है। स्ट्रिंग शाब्दिक को पात्रों के एक और सेट पर फिर से सौंपा नहीं जा सकता, जबकि, हम सरणी के पात्रों को फिर से सौंप सकते हैं।
सी में स्ट्रिंग उदाहरण
आइए एक सरल उदाहरण देखें जहां एक स्ट्रिंग घोषित किया जाता है और मुद्रित किया जाता है। '%S' का उपयोग C भाषा में स्ट्रिंग के लिए एक प्रारूप विनिर्देशक के रूप में किया जाता है।
उदाहरण
#EZstamaalakre<PsaTidiAayaAae.Pca>
#EZstamaalakre <SabD.Pca>
paunaZ mauqya(){
Axar caaIoari[11]={'jae', 'P', 'vai', 'P', 'Ti', 'pai', 'he', 'maIM', 'Pna', 'Ti', '\0'};
Axar bB2[11]="jacavapaDjajamabai";
laiqaiyae("lapaeTnaa sarnai kimata hI: %SabD\n", caaIoari);
laiqaiyae("daeri SaabDik kimata hI: %SabD\n", bB2);
vaapasakre 0;
}
आउटपुट
lapaeTnaa sarnai kimata hI: jacavapaDjajamabai
daeri SaabDik kimata hI: jacavapaDjajamabai
ट्रैवर्सिंग स्ट्रिंग
स्ट्रिंग को ट्रैवर्स करना किसी भी प्रोग्रामिंग भाषा में सबसे महत्वपूर्ण पहलुओं में से एक है। हमें एक बहुत बड़े पाठ में हेरफेर करने की आवश्यकता हो सकती है जो पाठ को पार करके किया जा सकता है। ट्रैवर्सिंग स्ट्रिंग कुछ हद तक एक पूर्णांक सरणी से अलग है। हमें एक पूर्णांक सरणी को पार करने के लिए सरणी की लंबाई को जानने की आवश्यकता है, जबकि हम स्ट्रिंग के मामले में शून्य चरित्र का उपयोग कर सकते हैं ताकि स्ट्रिंग की पहचान की जा सके और लूप को समाप्त किया जा सके। इसलिए, एक स्ट्रिंग को पार करने के दो तरीके हैं। स्ट्रिंग की लंबाई का उपयोग करके अशक्त चरित्र का उपयोग करके। आइए उनमें से प्रत्येक पर चर्चा करें।
स्ट्रिंग की लंबाई का उपयोग करना
आइए एक स्ट्रिंग में स्वरों की संख्या की गिनती का एक उदाहरण देखें।
उदाहरण
#EZstamaalakre<PsaTidiAayaAae.Pca>
qaalai mauqya ()
{
Axar Psa[11] = "jacavapaDjajamabai";
paunaZ maIM = 0;
paunaZ gainataiRkrnaa = 0;
jabatak(maIM<11)
{
Agar(Psa[maIM]=='P' || Psa[maIM] == 'EZTi' || Psa[maIM] == 'maIM' || Psa[maIM] == 'yau' || Psa[maIM] == 'he')
{
gainataiRkrnaa ++;
}
maIM++;
}
laiqaiyae(" saMqyaa ka svar %paunaZ",gainataiRkrnaa);
}
आउटपुट
saMqyaa ka svar 4
अशक्त चरित्र का उपयोग करना
आइए नल चरित्र का उपयोग करके स्वरों की संख्या की गिनती का एक ही उदाहरण देखें।
उदाहरण
#EZstamaalakre<PsaTidiAayaAae.Pca>
qaalai mauqya ()
{
Axar Psa[11] = "jacavapaDjajamabai";
paunaZ maIM = 0;
paunaZ gainataiRkrnaa = 0;
jabatak(Psa[maIM] != vyaYaZ)
{
Agar(Psa[maIM]=='P' || Psa[maIM] == 'EZTi' || Psa[maIM] == 'maIM' || Psa[maIM] == 'yau' || Psa[maIM] == 'he')
{
gainataiRkrnaa ++;
}
maIM++;
}
laiqaiyae(" saMqyaa ka svar %paunaZ",gainataiRkrnaa);
}
आउटपुट
saMqyaa ka svar 4
इनपुट के रूप में स्ट्रिंग स्वीकार करना
अब तक, हमने उपयोगकर्ता से इनपुट को स्वीकार करने के लिए SCANF का उपयोग किया है। हालांकि, इसका उपयोग स्ट्रिंग्स के मामले में भी किया जा सकता है लेकिन एक अलग परिदृश्य के साथ। नीचे दिए गए कोड पर विचार करें जो अंतरिक्ष का सामना करते समय स्ट्रिंग को संग्रहीत करता है।
उदाहरण
#EZstamaalakre<PsaTidiAayaAae.Pca>
qaalai mauqya ()
{
Axar Psa[20];
laiqaiyae("pzavaeSa krnaa daeri?");
laijaiyae("%SabD",Psa);
laiqaiyae("Aapa pzavaiSTi ki %SabD",Psa);
}
आउटपुट
pzavaeSaRkrnaa SabD?jacavapaDjajamabai hI XaeSV
Aapa pzavaiSTiRki jacavapaDjajamabai
यह आउटपुट से स्पष्ट है कि, उपरोक्त कोड अंतरिक्ष अलग किए गए तार के लिए काम नहीं करेगा। इस कोड को अंतरिक्ष से अलग स्ट्रिंग्स के लिए काम करने के लिए, स्कैनफ फ़ंक्शन में आवश्यक मामूली बदल गया, अर्थात्, स्कैनफ ("%s", s) लिखने के बजाय, हमें लिखना होगा: स्कैनफ ("%[^\ n] s", s) जो संकलक को निर्देश देता है कि नई लाइन (\ n) का सामना करना पड़ रहा है। आइए अंतरिक्ष-अलग किए गए तार को संग्रहीत करने के लिए निम्नलिखित उदाहरण पर विचार करें।
उदाहरण
#EZstamaalakre<PsaTidiAayaAae.Pca>
qaalai mauqya ()
{
Axar Psa[20];
laiqaiyae("pzavaeSa krnaa daeri?");
laijaiyae("%[^\n]s",Psa);
laiqaiyae("Aapa pzavaiSTi ki %SabD",Psa);
}
आउटपुट
pzavaeSaRkrnaa SabD?jacavapaDjajamabai hI XaeSV
Aapa pzavaiSTiRki jacavapaDjajamabai hI XaeSV
यहां हमें यह भी ध्यान देना चाहिए कि हमें स्ट्रिंग को स्टोर करने के लिए स्कैनफ में (&) ऑपरेटर के पते का उपयोग करने की आवश्यकता नहीं है क्योंकि स्ट्रिंग एस वर्णों की एक सरणी है और सरणी का नाम है, यानी, एस, स्ट्रिंग (वर्ण सरणी) के आधार पते को इंगित करता है इसलिए हमें इसका उपयोग करने की आवश्यकता नहीं है।
कुछ महत्वपूर्ण बिंदु
हालांकि, निम्नलिखित बिंदु हैं जिन्हें स्कैनफ का उपयोग करके स्ट्रिंग्स में प्रवेश करते समय देखा जाना चाहिए। कंपाइलर चरित्र सरणी पर सीमा जाँच नहीं करता है। इसलिए, एक ऐसा मामला हो सकता है जहां स्ट्रिंग की लंबाई चरित्र सरणी के आयाम से अधिक हो सकती है जो हमेशा कुछ महत्वपूर्ण डेटा को अधिलेखित कर सकती है। स्कैनफ का उपयोग करने के बजाय, हम गेट्स का उपयोग कर सकते हैं () जो एक हेडर फ़ाइल स्ट्रिंग में परिभाषित एक इनबिल्ट फ़ंक्शन है। GetS () एक समय में केवल एक स्ट्रिंग प्राप्त करने में सक्षम है।
तार के साथ संकेत
हमने अब तक सरणी, कार्यों और आदिम डेटा प्रकारों के साथ बिंदुओं का उपयोग किया है। हालांकि, पॉइंटर्स का उपयोग तार को इंगित करने के लिए किया जा सकता है। पॉइंटर्स को इंगित करने के लिए पॉइंटर्स का उपयोग करने के विभिन्न फायदे हैं। आइए हम सूचक के माध्यम से स्ट्रिंग तक पहुंचने के लिए निम्नलिखित उदाहरण पर विचार करें।
उदाहरण
#EZstamaalakre<PsaTidiAayaAae.Pca>
qaalai mauqya ()
{
Axar Psa[11] = "jacavapaDjajamabai";
Axar *pai = Psa; // saucak pai hI ESaara kae SabD Psa.
laiqaiyae("%SabD",pai); // SabD jacavapaDjajamabai hI mauita Agar hma CpaaEZ pai.
}
आउटपुट
jacavapaDjajamabai
जैसा कि हम जानते हैं कि स्ट्रिंग वर्णों की एक सरणी है, पॉइंटर्स का उपयोग उसी तरह से किया जा सकता है जिस तरह से वे सरणियों के साथ उपयोग किए गए थे। उपरोक्त उदाहरण में, P को वर्णों की सरणी के लिए एक सूचक के रूप में घोषित किया जाता है। पी एस के समान प्रभावित करता है क्योंकि एस स्ट्रिंग का आधार पता है और आंतरिक रूप से एक सूचक के रूप में माना जाता है। हालाँकि, हम S की सामग्री को नहीं बदल सकते हैं या S की सामग्री को सीधे किसी अन्य स्ट्रिंग में कॉपी नहीं कर सकते हैं। इस प्रयोजन के लिए, हमें स्ट्रिंग्स को स्टोर करने के लिए पॉइंटर्स का उपयोग करने की आवश्यकता है। निम्नलिखित उदाहरण में, हमने एक स्ट्रिंग की सामग्री को दूसरे में कॉपी करने के लिए पॉइंटर्स का उपयोग दिखाया है।
उदाहरण
#EZstamaalakre<PsaTidiAayaAae.Pca>
qaalai mauqya ()
{
Axar *pai = "namastae jacavapaDjajamabai";
laiqaiyae("daeri p: %SabD\n",pai);
Axar *Kyau;
laiqaiyae("nakla saamagazi ka p maeM q...\n");
Kyau = pai;
laiqaiyae("daeri q: %SabD\n",Kyau);
}
आउटपुट
daeri pai: namastae jacavapaDjajamabai
nakla saamagazi ka pai maeM Kyau...
daeri Kyau: namastae jacavapaDjajamabai
एक बार एक स्ट्रिंग को परिभाषित करने के बाद, इसे पात्रों के दूसरे सेट पर फिर से नियुक्त नहीं किया जा सकता है। हालांकि, पॉइंटर्स का उपयोग करते हुए, हम स्ट्रिंग को वर्णों के सेट को असाइन कर सकते हैं। निम्नलिखित उदाहरण पर विचार करें।
उदाहरण
#EZstamaalakre<PsaTidiAayaAae.Pca>
qaalai mauqya ()
{
Axar *pai = "namastae jacavapaDjajamabai";
laiqaiyae("pahlae naiyata: %SabD\n",pai);
pai = "namastae";
laiqaiyae("baaD naiyata: %SabD\n",pai);
}
आउटपुट
pahlae naiyata: namastae jacavapaDjajamabai
baaD naiyata: namastae