Working With String
Working With String
जब किसी Variable
में “C” Character Set का पूरा एक समूह Input
किया जाता है , जिसका एक निश्चित अर्थ होता है , तो इसे String
कहते हैं | जैसे
“Sayema”
“Rashid” “Shadab” आदि String है क्योंकि
इनमें “C” Character Set के Characters का पूरा एक समूह है और इनका एक विशेष अर्थ भी है |
हम ऐसी किसी Computer
Program की कल्पना भी नहीं कर सकते हैं , जिसमें String का प्रयोग न किया गया हो | User
को किसी न किसी तरह की Information देने के
लिए ही हम विभन्न प्रकार के Programs Develop करते हैं और Information हमेंशा Characters के एक समूह यानी String के रूप में ही Represent हो सकता है |
इसलिए
String
Manipulation किसी भी Program का एक बहुत ही
महत्वपूर्ण हिस्सा होता है |
scanf() Function किसी String को Accept करने
में पूरी तरह से सक्षम नहीं होता है , क्योंकि Carriage Return , New Line
Character Tab , Form Feed Character प्राप्त होता है , scanf() Function Terminate हो जाता है | इसलिए
अगर हमें प्रोग्राम में किसी String के साथ कोई
प्रक्रिया करनी हो , तो हमें ऐसे Functions की जरुरत होती है
, जो पुरे String को Accept कर सके और
मेमोरी में Store कर सके |
“C” Language में Characters व Strings पर
काम करने के लिए कुछ अलग Functions बनाए गए हैं, जो scanf()
Function की कमियों को पूरा करते हैं |
एक
और ध्यान देने वाली बात ये है कि जब भी हमें किसी प्रोग्राम में String
के साथ किसी प्रकार की प्रक्रिया करनी होती है , तब हमें उस String
को Computer की Memory में
Store करना पड़ता है |
हम जिस तरह से
किसी एक Character
या किसी एक Numerical मान Computer को
की Memory में Store करके Manipulate व Process करते
हैं , ठीक उसी तरह से हम किसी String को Computer की Memory में Store करके Manipulate
नहीं कर सकते हैं , क्योंकि एक String कभी भी
एक Single Data Item नहीं होता है , बल्कि Character प्रकार के बहुत सारे Data Items का पूरा एक समूह
होता है | इसलिए एक String
को Computer की Memory में
Store करने के लिए हमें हमेशा कम से कम एक One
Dimensional Array बनाना पड़ता है |
एक उदाहरण द्वारा
समझते है कि scanf() Function String पर काम करने के
लिए क्यों उपयुक्त नहीं है | हम
एक प्रोग्राम बनाते है जिसमें किसी व्यक्ति का पूरा नाम व उसकी उम्र Input
किया जाएगा और Output में वापस उसका नाम और ये
Message कि अगले साल उसकी उम्र एक साल अधिक हो जाएगी Print
होगा | इस
प्रोग्राम में दो Variable Declare करने होंगे
, जिसमें एक Variable नाम Accept करेगा
व दूसरा Variable उम्र Accept करेगा |
इस Program
में हमने पहला Variable Age int प्रकार का
लिया है , क्योंकि उम्र का मान संख्यात्मक होता है |
दूसरा
Variable
name लिया है | यह
Character
प्रकार का है क्योंकि नाम में Characters भी
होती है | char प्रकार
का एक Variable केवल एक ही Character Accept कर सकता है और String Input करने के लिए किसी अन्य प्रकार का Data Type “C” में नहीं है |
इसलिए
name
को एक One Dimensional Array के रूप में Declare
किया गया है |
Array का
प्रयोग तब किया जाता है , जब एक ही Data Type के ढेर सारे Data
किसी एक ही Variable में Store करने होते है |
चुंकि इस Program
में हम एक नाम Computer की Memory में Store करना चाहते है , और एक नाम में Characters
का पूरा एक समूह होता है , इसलिए नाम को Store करने के लिए हमने इस Program में name नाम का एक Array Declare किया है |
Program
/* Inputting Name and Age & Getting Name and Age one Year Incremented in output */
#include<stdio.h>
main()
{
/* Declaration Section */
int age;
char name[30];
/* Input Section */
printf("\n Enter Name :");
scanf("%s", name);
printf("\n Enter Age :");
scanf("%d", &age);
/* Process Section */
age=age+1;
/* Output Section */
printf("Your Name is %s", name);
printf("Your Age Will Be %d Next Year", age);
getch();
}
Output
Enter Name :Shadab
Enter Age :25
Your Name is ShadabYour Age Will Be 26 Next Year
इस Program
में यदि हम Array का प्रयोग ना करें , तो नाम
के हर अक्षर को Store करने के लिए एक अलग Variable
Declare करना पडेगा , क्योंकि char प्रकार का Data
Type एक Variable में केवल एक ही अक्षर Store
कर सकता है | ऐसे
में प्रोग्राम काफी बड़ा और जटिल हो जाएगा क्योंकि हर अक्षर के लिए हमें एक Printf()
Function द्वारा Message देना होगा और हर Input
किए गए Character को पढ़ने के लिए एक scanf()
Function लिखना पडेगा |
इस
समस्या से बचने के लिए “C”
में Array की व्यवस्था की गई |Array की
विशेषता ये है कि इसके Bracket में जितनी संख्या लिखी जाती है , हम उतने ही Data इसमें Store कर सकते हैं और जिस Data Type का Arrray Declare किया जाता है , वह Array उसी तरह के मान मेमोरी में Store करता है |
इस प्रोग्राम में
हमने char
प्रकार का Array Declare किया है और Bracket
में Array की Size 30 दी
है , इसलिए इस Array में हम केवल Characters Store कर सकते है | और
इस Array
में कुल अक्षरों की संख्या 30 हो सकती है |
यहां हमने केवल
एक ही Bracket
में Size दी है इसलिए इसे One-
Dimensional Array कहते है |
यदि
एक और Bracket
बना कर कोई Size उसमें लिख दें , तो यह Two
Dimensional Array बन जाता है , और यही प्रक्रिया यदि आगे भी अपनाई
जाए तो Declare होने
वाला Array , Multi Dimensional हो
जाता है | जैसे int
value [10][12] एक Two
Dimensional Array का उदाहरण और int sum[2][3][4] एक Multi Dimensional Array का उदाहरण है |
हम जानते हैं कि
हम किसी Identifier
को Declare करते हैं , तो वह Identifier
अपने Data Type के अनुसार मेमोरी में कुछ जगह Reserve
करता है | ठीक
इसी तरह से एक Array भी Memory में
अपनी Size के अनुसार कुछ Space Reserve कर लेता है , लेकिन Array की विशेषता ये है कि हम
स्वयं ये तय कर सकते हैं कि एक Array
memory में कितनी जागह Reserve करेगा , जबकि
समान्य Identifier के सम्बन्ध में identifier Memory में कितनी जगह Reserve करेगा , ये Use किए जा रहे Identifier के Data Type पर निर्भर होता है | Array
एक ऐसा Identifier होता है , जिसमें हम एक ही
प्रकार के एक से अधिक Data Store कर सकते हैं |
इस प्रोग्राम के
अनुसार यदि हम char name; लिखते है , तो यह Statement
Memory में एक Byte की Space लेगा और इसमें हम सिर्फ एक Character Store कर
सकेंगे | लेकिन एक नाम में हमेशा एक से ज्यादा Characters
होते हैं , इसलिए हमें इस name नाम के Identifier
में एक से अधिक Character Store करने हैं |
इस स्थिति में एक
name
नाम के Character प्रकार के Array में हम कितने Characters Store करना चाहते हैं , ये Size
भी हम Array के साथ Specify कर देते हैं और Statement को char name
[size]; लिखते हैं , जहां size उस मान को Specify
करता है , जितने Characters हम नाम के रूप में
Memory में Store करना चाहते हैं |
हमने इस Program
में Name Identifier की Size एक Bracket में char name [25] Statement द्वारा Specify कर दिया है |
अब
name
नाम का Identifier Memory में 25 Byte की जगह एक क्रम में Reserve कर लेता है और name
नाम के Identifier की size 25 Byte हो जाती है |
name की size
25 Bye इसलिए हो जाती है , क्योंकि char प्रकार
का एक Data Memory में एक Byte की Space
Reserve करता है इसलिए char प्रकार के 25
Data Memory में 25 Byte की Space लेंगे |
यदि Data
Type Char प्रकार से बदलकर int प्रकार कर दे व
Array को char name [25] से बदलकर int name[25] कर
दें तो यह Array Memory में 25*2=50 Byte की Space Reserve करेगा क्योंकि int प्रकार का एक Data Memory में दो Byte की जगह लेता है |
इसलिए
int
प्रकार के 25 Data Memory में 50 Byte की जगह घेरेंगे | name
नाम का Array मेमोरी में निम्न चित्रानुसार Space
Reserve करता है |
अब यदि हम इसमें
कोई नाम जैसे SHADAB ALAM Store करें तो वह
निम्नानुसार Memory में Array की
विभन्न Location पर Store होगा |
इस तरह से हर
अक्षर Memory
की अलग – अलग Locations पर जा कर Store
होता है | हम
यदि 25
से कम अक्षर भी Input करेंगे , तो भी Name
25 Byte तो Reserve रखेंगे ही |
ध्यान
दें की Blank
Space भी एक Character है |
सिर्फ Char
प्रकार के Array में हमें केवल Characters
या String Input करने का Statement देना होता है , जबकि यदि हम किसी और प्रकार का Array Declare करेंगे तो Array की हर Locations पर जा कर मान Store करना पड़ता है और मान पुनः
प्राप्त करने के लिए भी हर Location पर जाना पड़ता है |
Char प्रकार
के Array में हम जैसे ही एक Character Input करते हैं , प्रोग्राम Control स्वयं ही Array
की अगली Location पर चला जाता है और Input
होने वाले मान को Store करता जाता है साथ ही Array
में जब String या Character Input करना होता है तब हमें &Address Operator का
प्रयोग नहीं करना होता है क्योंकि Array के नाम से ही “C”
Compiler समझ जाता है कि Input किए जाने वाले Character
या String को किस Identifier के किस Location में Store करना
है | यदि हम &
Address Operator का प्रयोग करते हैं तो प्रोग्राम सही तरीके से काम
नहीं करता है |
एक बात हमेंशा
ध्यान रखें कि हमें जितने Characters Input करवाने
हैं , Array की Size हमेंशा उससे एक
अधिक रखनी चाहिए , क्योंकि “C” Compiler हर Array का अन्त वहां समझता है जहां उसे “\0” (NULL) Character प्राप्त होता है | जब
हम String
Input करवाते हैं , तब “C” Compiler स्वयं ही String के अन्त में ये NULL
Character लगा देता है |
यदि हम Array
की size कम लेते है और उसमें String
Input करवाने के बाद यदि NULL के लिए कोई जगह
नहीं बचती है , तो “C” Compiler स्वयं ही Input किए गए String के अंतिम Character के स्थान पर NULL Character को Replace कर देता है | इसलिए
यदि हमें 10 Character का String Input करना है , तो हमारे Array की Size 11 होनी चाहिए |
माना हम “SHADAB
ALAM” नाम का String Input करके Enter
Key Press करते हैं , तो प्रोग्राम का दूसरा Statement
Execute नहीं होता , बल्कि सीधे ही एक गलत Result प्राप्त हो जाता है जिसमें SHADAB string ही प्राप्त
होती है | space के
बाद का नाम भी नहीं आता और Program User से Age भी नहीं मांगता है |
जैसाकि हमने पहले
भी कहा की ऐसा इसलिए होता है , क्योंकि scanf() Function Blank
Space , Form Feed , Tab key या New Line Character Constant
मिलते ही Terminate हो जाता है , यानी इनके
बाद Input किए जा रहे Characters Array में नहीं जाते हैं बल्कि Garbage Value के रूप में Memory
में Store हो जाते हैं और यही Garbage
Value अगले Identifier age को प्राप्त हो जाती
है | चुंकि age
int प्रकार का है इसलिए इसको जब Character प्राप्त
होता है , तो यह Output में अजीब से Symbol Print कर देता है |
No comments