Ciągi C ++

C ++ udostępnia następujące dwa typy reprezentacji ciągów -

  • Ciąg znaków w stylu C.
  • Typ klasy ciągu wprowadzony w standardowym języku C ++.

Ciąg znaków w stylu C.

Ciąg znaków w stylu C pochodzi z języka C i nadal jest obsługiwany w C ++. Ten ciąg jest w rzeczywistości jednowymiarową tablicą znaków zakończoną znakiemnullznak „\ 0”. Tak więc ciąg zakończony znakiem null zawiera znaki, które składają się na ciąg, po którym następuje znaknull.

Następująca deklaracja i inicjalizacja tworzą łańcuch składający się ze słowa „Hello”. Aby przechowywać znak null na końcu tablicy, rozmiar tablicy znaków zawierającej ciąg jest o jeden większy niż liczba znaków w słowie „Hello”.

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

Jeśli zastosujesz się do zasady inicjalizacji tablicy, możesz napisać powyższą instrukcję w następujący sposób -

char greeting[] = "Hello";

Poniżej znajduje się prezentacja pamięci powyżej zdefiniowanego ciągu w C / C ++ -

W rzeczywistości nie umieszcza się znaku null na końcu stałej łańcuchowej. Kompilator C ++ automatycznie umieszcza „\ 0” na końcu ciągu podczas inicjalizacji tablicy. Spróbujmy wydrukować powyższy ciąg -

#include <iostream>

using namespace std;

int main () {

   char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

   cout << "Greeting message: ";
   cout << greeting << endl;

   return 0;
}

Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -

Greeting message: Hello

C ++ obsługuje szeroką gamę funkcji, które obsługują ciągi zakończone znakiem null -

Sr.No Funkcja i cel
1

strcpy(s1, s2);

Kopiuje ciąg s2 do łańcucha s1.

2

strcat(s1, s2);

Łączy ciąg s2 na końcu łańcucha s1.

3

strlen(s1);

Zwraca długość łańcucha s1.

4

strcmp(s1, s2);

Zwraca 0, jeśli s1 i s2 są takie same; mniej niż 0, jeśli s1 <s2; większe niż 0, jeśli s1> s2.

5

strchr(s1, ch);

Zwraca wskaźnik do pierwszego wystąpienia znaku ch w ciągu s1.

6

strstr(s1, s2);

Zwraca wskaźnik do pierwszego wystąpienia ciągu s2 w ciągu s1.

Poniższy przykład wykorzystuje kilka z wyżej wymienionych funkcji -

#include <iostream>
#include <cstring>

using namespace std;

int main () {

   char str1[10] = "Hello";
   char str2[10] = "World";
   char str3[10];
   int  len ;

   // copy str1 into str3
   strcpy( str3, str1);
   cout << "strcpy( str3, str1) : " << str3 << endl;

   // concatenates str1 and str2
   strcat( str1, str2);
   cout << "strcat( str1, str2): " << str1 << endl;

   // total lenghth of str1 after concatenation
   len = strlen(str1);
   cout << "strlen(str1) : " << len << endl;

   return 0;
}

Kiedy powyższy kod jest kompilowany i wykonywany, daje wynik w następujący sposób -

strcpy( str3, str1) : Hello
strcat( str1, str2): HelloWorld
strlen(str1) : 10

Klasa String w C ++

Standardowa biblioteka C ++ udostępnia plik stringklasa obsługująca wszystkie wymienione powyżej operacje, dodatkowo znacznie większa funkcjonalność. Sprawdźmy następujący przykład -

#include <iostream>
#include <string>

using namespace std;

int main () {

   string str1 = "Hello";
   string str2 = "World";
   string str3;
   int  len ;

   // copy str1 into str3
   str3 = str1;
   cout << "str3 : " << str3 << endl;

   // concatenates str1 and str2
   str3 = str1 + str2;
   cout << "str1 + str2 : " << str3 << endl;

   // total length of str3 after concatenation
   len = str3.size();
   cout << "str3.size() :  " << len << endl;

   return 0;
}

Kiedy powyższy kod jest kompilowany i wykonywany, daje wynik w następujący sposób -

str3 : Hello
str1 + str2 : HelloWorld
str3.size() :  10