String In C Language

    String In C Language

     कैरेक्टर के one-dimensional Array(वन डाइमेंशनल एरे) को स्ट्रिंग करता है। स्ट्रिंग टो double inverted coma (" ") में लिखा जाता है निम्न  उदाहरण एक स्टिंग का उदाहरण है। 

    "seven wonders of the world" 

    उपरोक्त स्ट्रिंग को जब मेमोरी में स्टोर करवाया जाएगा तो प्रत्येक character(कैरेक्टर) मेमोरी में एक बाइट का स्थान लेगा अतः यह कहा जा सकता है कि उपरोक्त स्ट्रिंग में 26 byte लेगी। यह कथन पूर्ण रूप से सत्य नहीं है। उपरोक्त स्ट्रिंग में कुल 27 बाइट मेमोरी की आवश्यकता होगी। इसका कारण यह है कि प्रत्येक स्टिंग के अंत में एक अतिरिक्त कैरेक्टर, जिसे null  कैरेक्टर का जाता है, भी स्टोर होता है।  इस कैरेक्टर को "\0"  के माध्यम से दर्शाया जाता है। यदि अंत में null कैरेक्टर नहीं होगा तो यह पता लगाना संभव नहीं होगा कि यह string कहां समाप्त हो रही है। 

    स्ट्रिंग को declare(डिक्लेयर) करने का तरीका अरे जैसा ही है किंतु स्थिति में data type(डाटा टाइप) हमेशा char ही होता है: 

    char string_name[size of string]; 

    उदाहरण: 

     char city[15]; 

    स्ट्रिंग को = ऑपरेटर के माध्यम से declare(डिक्लेअर) तथा  initialize(इनीशिएलाइज) एक साथ किया जा सकता है, किंतु किसी स्ट्रिंग वेरिएबल के बाद = ऑपरेटर की सहायता से वैल्यू स्टोर नहीं की जा सकती है। इसे initialize(इनीशिएलाइज)  करने से अलग अलग तरीके हैं। स्प्रिंग को declare(डिक्लेअर) तथा initialize(इनीशिएलाइज)  एक साथ भी किया जा सकता है। निम्न उदाहरण में कैरेक्टर एरे city को declare तथा initialize एक साथ ही किया जा सकता है: 

      char city[10= {'A' 'y','o','d','y','a','\0'

    या 

    char city[] = "Ayodya"

    उपरोक्त दोनों ही परिस्थितियों में मेमोरी में कुछ  निम्न प्रकार स्टोर होगा:

    string in C Language, w3 coding club, w3codingclub

    इसी प्रकार strcpy() function(फंक्शन ) का प्रयोग करते हुए  स्ट्रिंग को निम्न प्रकार  initialize किया जा सकता है। 

    char city[]/*Declaration */
    strcpy(city, "sanchore");

    strcpy() एक function(फंक्शन) है जो  उपरोक्त स्थिति में city वेरिएबल में sanchore स्टोर कर देगा। स्टिंग को निम्न प्रकार भी initialize किया जा सकता है:

       char city[10]; /* Declaration */
       city[0= 's';
       city[1= 'a';
       city[2= 'n';
       city[3= 'c';
       city[4= 'h';
       city[5= 'o';
       city[6= 'r';
       city[7= 'e';
       city[8= '\0';

    ध्यान दें कि करैक्टर डाटा को डबल इनवर्टेड कोमा("") की जगह हमेशा सिंगल इनवर्टेड कोमा(' ')  में  लिखा जाता है। 

    जैसे कि हम जान चुके हैं कि स्ट्रिंग एक एरे ही है जिसके अंत में null करैक्टर स्टोर होता हैं, अतः इसे एरे की भांति भी प्रिंट करवाया जा सकता है। 

    Example:-

    नीचे दिए गए उदाहरण में एक स्ट्रिंग भी खोल उप चलाते हुए प्रिंट करवाया गया है। 


    #include <stdio.h>
    #include <conio.h>
    void main()
    {
       char city[] = "Jalor";
       int c = 0;
       while (city[c] != '\0')
       {
          printf("%c",city[c]);     
          c++;
       }
        getch();
       
    }

    Output:-

    Jalor

    Explain Example:- 

    उपरोक्त प्रोग्राम में लोग जब पहली बार रन होगा तब वेरिएबल सी की वैल्यू 0 होगी। अतः लूप की कंडीशन city के index number (इंडेक्स संख्या) 0 जांच करेगी कि यह null हैं। यदि null नहीं मिलता है तो लुक प्रथम बार रन होगा। प्रत्येक रूप में वेरिएबल सी की वैल्यू में एक से वृद्धि हो रही है। अतः यह लो प्रत्येक index(इंडेक्स) के लिए जांच करेगा और जब null मिल जाएगा तो लूप  चलना बंद हो जाएगा। 

    जो कार्य उपरोक्त प्रोग्राम में लूप की सहायता से किया जा रहा है वही कार्य  control string "%s" के माध्यम से भी किया जा सकता है। 

    Example:- 

     नीचे दिए गए Example में printf() function(फंक्शन) में %s का प्रयोग करते हुए स्टिंग को प्रिंट करवाया गया है। 


        #include <stdio.h>    
        #include <conio.h>
        void main()
        {
           char city[] = "Jalor";        
           printf("%s",city)
           getch();
        }

    Output:-

    Jalor

    Explain Example:-

    इस प्रोग्राम में %s का प्रयोग किया गया है, जो की स्वत: यह जांच कर लेता है की स्ट्रिंग में null कहां पर स्टोर हैं, तथा उसी के अनुसार  वह  स्ट्रिंग को प्रिंट कर देता है। 


    User द्वारा Input लेना

    scanf() function की सहायता से user द्वारा input लेने में भी %s प्रयोग किया जाता हैं। यह ध्यान रखें कि scanf() में %s का प्रयोग करते समय एरे के नाम के पहले &(address of) Operator का प्रयोग नहीं किया जाता हैं। इसका कारण यह हैं कि एरे के नाम में एरे के प्रथम index (0) लस address store होता हैं। 

    Example:-


        #include <stdio.h>
        #include <conio.h>
        void main()
        {
           char nm[30];
           printf("\nEnter a string : ");
           scanf("%s",&nm);
           printf("You Entered : %s", nm);            
           getch();
        }

    Output:-

    Enter a string : Nirma
    You Entered : Nirma

    Explain Example:-

    ऊपर दिए गए उदाहरण में scanf("%s",&nm); की जगह scanf("%s",&nm[0]); का प्रयोग भी किया जा सकता हैं। चूंकि यहाँ पर index संख्या 0 दी गई हैं,
    अतः उसका एड्रेस प्राप्त करने के लिए & का प्रयोग किया गया हैं।

     कंट्रोल करैक्टर %s के सामान्य प्रयोग से एक स्प्रिंग में एक से अधिक शब्द स्टोर नहीं किए जा सकते हैं। इसे समझने के लिए उपरोक्त प्रोग्राम को एक बार फिर से रन करें तथा इनपुट करते समय Mukesh Kumar दें तथा आउटपुट को ध्यान से देखें आउटपुट में केवल Mukesh ही प्रिंट होगा। 


    #include <stdio.h>
    #include <conio.h>
    void main()
    {
        char nm[30];
        printf("\nEnter a string : ");            
        scanf("%s",&nm);
        printf("You Entered : %s", nm);
        getch();
    }

    Output:-

    Enter a string : Mukesh Kumar
    You Entered : Mukesh 

    ऊपर उदाहरण में एरे mn में सिर्फ Mukesh ही स्टार्ट हुआ हैं। इसका कारण यह है कि scanf() में कंट्रोल करैक्टर %s वाइट स्पीस(टैब, स्पीस, इंटर आदि) मिलते ही स्ट्रिंग को समाप्त कर देता है। 

    एक से अधिक शब्दों को एरे में स्टोर करवाना:-

    एक से अधिक शब्दों को एरे  में स्टोर किया जा सकता है इसके लिए विभिन्न तरीके हैं इसमें से प्रमुख निम्न प्रकार है: 
    (i)  कैरेक्टर एरे में लूप की सहायता से इनपुट लिया जाए तथा अंत में उसमें नल करैक्टर स्टोर करवा दिया जाए। 
    (ii) gets()  function का प्रयोग करते हुए। 
    (iv) scanf() function में %s का विशेष प्रयोग करते हैं। 

    Example:- 

    👇 इस उदाहरण में एक से अधिक शब्दों  को लूप  की सहायता से इनपुट करवाया जा रहा हैं:


    #include <stdio.h>
    #include <conio.h>
    void main()
    {
        char nm[30];
        char ch; 
        int c = 0;
        printf("\nType Text, press Enter to finish \n");        
        do
        {
           ch =  getchar();
         nm[c] = ch;
           c++;
       } while (ch!='\n');
        c--;
        nm[c] = '\0';
        printf("\nYou Entered : ");
        printf("\n%s",nm);
        getch();
    }

    Output:-

    Type Text, press Enter to finish
    Mukesh Kumar
    You Entered :
    Mukesh Kumar

    Explain Example:-

    ऊपर दिए गए उदाहरण में loop को तब तक चलाया गया है जब तक की (ch != "\n") कीबोर्ड से इंटर बटन नहीं दबा दिया जाता हैं। Enter button  की वैल्यू \n मानी जाती हैं। प्रत्येक लूप में वेरिएबल ch में getchar() फंक्शन की सहायता से एक कैरेक्टर स्टोर होता जाएगा। जब यूजर कीबोर्ड से इंटर बटन दबाएगा तो प्रोग्राम का कंट्रोल लूप  से बाहर आ जाएगा और एरे के अंतिम इंडेक्स पर null("\0") स्टोर हो जाएगा। अंत में इनपुट की गई स्ट्रिंग को प्रिंट करा दिया गया हैं।   

    एक या अधिक शब्दों को gets() function की सहायता से भी कैरेक्टर एरे में स्टोर किया जा सकता हैं  तथा puts() funtion की सहायता से उसे प्रिन्ट किया जा सकता हैं: 


    #include <stdio.h>
    #include <conio.h>
    void main()
    {
        char nm[50];
        printf("Enter a string:  ");   
        gets(nm);
        puts(mn);
        getch();
    }

    Output:-

    Enter a string: Dasrath Singh
    Dasrath Singh

    👆 ऊपर दिए गए उदाहरण में getch() funtion का प्रयोग किया गया हैं। यह funtion स्ट्रिंग इनपुट में लेने के लिए प्रयोग किया जाता हैं। इससे इनपुट  में ली जाने  वाली स्ट्रिंग में  white space तथा अन्य स्पेस  भी स्टोर हो सकते हैं। बाद में puts() function का प्रयोग करते हुए स्ट्रिंग को पुनः प्रिन्ट करवाया गया हैं। 

     स्टिंग को scanf() में प्रयोग करने के लिए %s के विशेष प्रारूप का प्रयोग किया जा सकता है। इसे प्रयोग करने का प्रारूप निम्न प्रकार है। 

    %[allowed_characters ]s
                या 
    %[^Not_allowed_characters]s

    Example:-

       scanf("%[abc]s",nm);  /* Only a, b, and c allowed */

    उपरोक्त उदाहरण में इनपुट तब तक दिया जाएगा जब तक की a, b, या c के अतिरिक्त कोई अन्य कैरेक्टर नहीं आ जाए। उदाहरण के लिए यदि इनपुट की जाने वाली वैल्यू Absolute है तो s से पहले तक के कैरेक्टर ही एरे में  होंगे अर्थात एरे nm में सिर्फ a ही स्टोर हो पाएगा। 

       scanf("%[^abc]s",nm);  /* All allowed except a, b, and c  */

    ऊपर दिए गए उदाहरण में a, b, तथा c के अतिरिक्त अन्य सभी कैरेक्टर इनपुट में लिए जा सकते हैं। उदाहरण के लिए यदि उदाहरण के लिए यदि programing इनपुट किया जाता है तो एरे में  सिर्फ prog  ही स्टोर हो पाएगा और a के आगे का हिस्सा amming मेमोरी में ही रह जाएगा। 

       scanf("%[^\n]s",nm);  /* All allowed except \n (Enter key)  */

    उपर दिए के उदाहरण में सिर्फ ("\n") के अलावा सभी अन्य कैरेक्टर(स्पेस भी) इनपुट में दिए जा सकेंगे। अन्य शब्दों में यह कहा जा सकता है कि जब तक कि-बोर्ड से इंटर नहीं दबाया जाएगा तब तक इनपुट किए गए सभी कैरक्टर एरे में स्टोर स्टोर जाएंगे। 

    Example:-

    👇 नीचे दिए गए उदाहरण से स्पष्ट होता है कि %s का advance प्रयोग करते हुए स्पेस भी इनपुट में ली जा सकती है।

       #include <stdio.h>
       #include <conio.h>
       void main()
       {
          char nm[50];
          printf("\nEnter a string: ");
          scanf("%[^\n]s",nm);
          printf("\n You Entered:  %s",nm);    
          getch();
       }

    Output:-

    Enter a string: Ranjit Singh
    You Entered: Ranjit Singh

    👆 ऊपर दिए गए example में  scanf() में  %[^\n]s  का प्रयोग यह बताता है कि इंटर के अलावा अन्य सभी करैक्टर nm एरे में इनपुट में लिए जा सकते हैं। 

    Post a Comment

    0 Comments