Concepts of String: character array, pointer to character array, use of string.h and its functions (strcmp, strcat, strcpy, strlen, strrev)

C શૈલીની string એ એવો character array છે જે છુપાયેલા terminator \0 થી પૂરો થાય છે, char નું pointer એના પર ચાલી શકે છે, અને string.h નાં પાંચ functions (strlen, strcpy, strcat, strcmp, strrev) રોજિંદું કામ કરે છે.

10 min read · 11 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

"Masala Dosa" ક્યાં વસે છે?

Till એ વસ્તુઓનાં નામ સંઘરવાં પડે છે: "Chai", "Masala Dosa", "Chhaas".

આશ્ચર્ય આ છે: મૂળ C++ ને C માંથી કોઈ જડેલો string નો પ્રકાર મળ્યો જ નથી. 12 માટે int છે, 12.50 માટે double છે, અને લખાણ માટે... એવું કશું નહીં.

તો 1972 થી દરેક C ના program એ લખાણ કેવી રીતે સંભાળ્યું? એક યુક્તિથી: હરોળમાં ઊભેલી chars ની ફોજ, વત્તા હરોળ ક્યાં પૂરી થાય એ ચીંધતો એક અદૃશ્ય રખેવાળ.

Theory

ગાર્ડના ડબ્બાવાળી ટ્રેન

String ને ટ્રેન તરીકે વિચારો: દરેક ડબ્બો એક અક્ષર લઈ જાય છે, C, h, a, i. છેડે એક ગાર્ડનો ડબ્બો ચાલે છે જે મુસાફરો ક્યારેય જોતા નથી: null અક્ષર \0.

String નું દરેક function એ જ રીતે કામ કરે છે: engine થી શરૂ કરો અને ગાર્ડ સુધી ડબ્બે ડબ્બે ચાલો. એ રીતે એમને ખબર પડે છે કે string ક્યાં અટકે છે. ગાર્ડ ખોવાય તો function અસ્તવ્યસ્ત memory માં ચાલવા માંડે છે.

Theory

Character array, ઔપચારિક રીતે

C શૈલીની string એ char નો array છે જેની સામગ્રી null terminator `\0` થી પૂરી થાય છે:

char item[6] = "Chai";

Memory: C h a i \0 (5 ખાનાં વપરાયાં, 1 વધારાનું). "Chai" માં 4 દેખાતા અક્ષર છે પણ એને 5 bytes જોઈએ છે.

બે નિયમ: array લખાણ વત્તા \0 માટે પૂરતો મોટો હોવો જોઈએ, અને declaration પછી તમે = થી સોંપી શકતા નથી (item = "Dosa" ગેરકાયદે છે, arrays સોંપી શકાતા નથી: નકલ કરવી એ function નું કામ છે).

Theory

Pointer ટ્રેન પર ચાલે છે

char નું pointer પહેલા ડબ્બાનું સરનામું રાખે છે:

char *p = item;

હવે *p એ 'C' છે, અને p++ પછીના અક્ષર પર ખસે છે. આ loop string ને એ જ રીતે છાપે છે જે રીતે library પોતે છાપત:

while (*p != '\0') { cout << *p; p++; }

નીચેનું string.h નું દરેક function ચૂપચાપ આ જ loop છે, જુદો ગણવેશ પહેરીને. આ ચાલવાનું એક વાર સમજો અને પાંચેય functions સ્પષ્ટ થઈ જાય છે.

Practical

<cstring> ના પાંચ કામગરા

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    char a[20] = "Masala";
    char b[] = "Dosa";

    cout << strlen(b) << endl;   // 4, the guard \0 is not counted

    strcat(a, b);                // a becomes "MasalaDosa"
    cout << a << endl;

    char copy[20];
    strcpy(copy, a);             // copy now holds "MasalaDosa"

    cout << strcmp("Chai", "Chai") << endl;  // 0 means EQUAL
    cout << strcmp("Chai", "Dosa") << endl;  // negative: C before D
    return 0;
}

At a glance

string.h એક નજરમાં

Functionકામયાદ રાખો
strlen(s)અક્ષરો ગણે છે\0 ને ગણતું નથી
strcpy(d, s)s ને d માં નકલ કરે છેd પૂરતું મોટું હોવું જોઈએ
strcat(d, s)s ને d ના છેડે જોડે છેd માં બંને માટે જગ્યા જોઈએ
strcmp(a, b)કક્કાવારી પ્રમાણે સરખાવે છે0 = સરખાં, નિશાની = ક્રમ
strrev(s)જગ્યા પર જ ઊલટાવે છેપ્રમાણભૂત નથી (Turbo C)

Think first

જાતે ગણો

char t[10] = "Chai";

Tap કરતાં પહેલાં, બંનેના જવાબ આપો: strlen(t) શું પાછું આપે છે, અને "Chai" ખરેખર array નાં કેટલાં bytes રોકે છે?

Show the answer

strlen(t) એ 4 પાછું આપે છે: એ દેખાતા અક્ષરો ગણે છે અને ગાર્ડ પર અટકી જાય છે. પણ લખાણ 5 bytes રોકે છે: C, h, a, i, \0. આ તફાવત એ string ની સૌથી વધુ પુછાતી હકીકત છે. n માપનો array declare કરો અને એમાં વધુમાં વધુ n માઇનસ 1 લંબાઈની string જ સમાય.

Quiz

Till સભ્યપદ તપાસે છે: if (strcmp(entered, "STAFF123")). Password બરાબર મળે છે. strcmp શું પાછું આપે છે, અને if ચાલે છે?

  1. 0 પાછું આપે છે, એટલે if **ચાલતું નથી**
  2. 1 (true) પાછું આપે છે, એટલે if ચાલે છે
  3. 0 પાછું આપે છે, અને 0 એ true છે એટલે if ચાલે છે
  4. એ string ની લંબાઈ, 8, પાછી આપે છે
Show the answer

0 પાછું આપે છે, એટલે if **ચાલતું નથી**

સરખી strings માટે strcmp એ 0 પાછું આપે છે, અને C++ માં શૂન્ય એ false છે, એટલે if નો ભાગ છોડી દેવાય છે. આ ઊલટો તર્ક હજારો students ને પકડે છે: સરખાપણાની સાચી કસોટી છે strcmp(a, b) == 0. વિકલ્પ B એ બરાબર એ જ ગેરસમજ છે જેની કસોટી થાય છે; strcmp ક્યારેય લંબાઈ પાછી આપતું નથી, અને 0 ક્યારેય true નથી.

Watch out

અહીં marks ગળે છે

strcmp ના 0 ની ગૂંચવણ: તમારા જવાબમાં લખો કે 0 એટલે સરખાં, ઋણ એટલે પહેલી string કક્કાવારીમાં પહેલાં આવે છે, ધન એટલે પછી.

strcpy નો ઊભરો: char[10] માં 15 અક્ષર નકલ કરવાનું બરાબર compile થાય છે અને ચાલતી વખતે memory બગાડે છે.

strrev પ્રમાણભૂત નથી: એ Turbo C માં છે પણ GCC માં નહીં. GCC ના વાતાવરણમાં તમે તમારા પોતાના loop થી ઊલટાવો છો; પુછાય તો એમ કહો.

Theory

આગળનો પુલ

C++ પછીથી std::string class આપે છે, જે પોતાની memory સંભાળે છે, = અને + ને ચાલવા દે છે, અને આમાંના મોટા ભાગના ફાંદા દૂર કરે છે. તમારી પરીક્ષા હજી પહેલાં char arrays અને string.h ની જ કસોટી કરે છે, કારણ કે એ શીખવે છે કે memory માં લખાણ ખરેખર શું છે. તમે classes સુધી પહોંચો, ત્યારે નોંધજો કે std::string એ ફક્ત આ જ ટ્રેન-અને-ગાર્ડ ના વિચાર આસપાસ કોઈએ લખેલો class છે.

Summary

Key takeaways

  • C-string એ null terminator \0 થી પૂરો થતો char નો array છે: "Chai" ને 4 અક્ષર માટે 5 bytes જોઈએ.
  • char નું pointer array પર ડબ્બે ડબ્બે ચાલે છે જ્યાં સુધી \0 ન મળે.
  • strlen \0 વગર ગણે છે; strcpy નકલ કરે છે; strcat જોડે છે; બંનેને પૂરતું મોટું લક્ષ્ય જોઈએ.
  • strcmp સરખાં હોય તો 0 પાછું આપે છે (== 0 થી કસો), કક્કાવારીના ક્રમ માટે ઋણ કે ધન.
  • strrev જગ્યા પર જ ઊલટાવે છે પણ પ્રમાણભૂત નથી (ફક્ત Turbo C, GCC નહીં).
  • Arrays ને = થી સોંપી શકાતા નથી; લખાણની નકલ કરવી એ strcpy નું કામ છે.
  • Memory hook: ગાર્ડના ડબ્બાવાળી ટ્રેન.

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Concepts of OOPS

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Concepts of String: character array, pointer to character array, use of string.h and its functions (strcmp, strcat, strcpy, strlen, strrev) · Object Oriented Programming and Data Structures (OOPs & D.S.) · Gri-Learn