Unetway

C ++ - Строки

C ++ предоставляет следующие два типа строковых представлений:

  • Строка символов в стиле C.
  • Тип класса string, введенный со стандартным C ++.

Строка символов C-Style

Строка символов в стиле C начинается с языка C и продолжает поддерживаться внутри C ++. Эта строка на самом деле представляет собой одномерный массив символов, который заканчивается нулевым символом '\ 0'. Таким образом, строка с нулевым завершением содержит символы, которые содержат строку, за которой следует нуль .

Следующее объявление и инициализация создают строку, состоящую из слова «Hello». Чтобы удерживать нулевой символ в конце массива, размер массива символов, содержащий строку, больше, чем количество символов в слове «Hello».

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

Если вы следуете правилу инициализации массива, вы можете написать вышеприведенный оператор следующим образом:

char greeting[] = "Hello";

На самом деле, вы не ставите нулевой символ в конце строковой константы. Компилятор C ++ автоматически помещает '\ 0' в конец строки, когда он инициализирует массив. Попробуем напечатать вышеупомянутую строку -

#include <iostream>

using namespace std;

int main () {

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

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

   return 0;
}

Когда приведенный выше код компилируется и выполняется, он производит следующий результат:

Greeting message: Hello

C ++ поддерживает широкий спектр функций, которые управляют строками, завершающими нуль -

strcpy (s1, s2); Копирует строку s2 в строку s1.
strcat (s1, s2); Объединяет строку s2 в конец строки s1.
StrLen (S1); Возвращает длину строки s1.
strcmp (s1, s2); Возвращает 0, если s1 и s2 одинаковы; меньше 0, если s1 <s2; больше 0, если s1> s2.
strchr (s1, ch); Возвращает указатель на первое вхождение символа ch в строке s1.
strstr (s1, s2); Возвращает указатель на первое вхождение строки s2 в строке s1.

В следующем примере используется несколько из вышеупомянутых функций -

#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;
}

Когда приведенный выше код скомпилирован и исполнен, он производит результат следующим образом:

strcpy (str3, str1): Привет
strcat (str1, str2): HelloWorld
strlen (str1): 10

Класс String в C ++

Стандартная библиотека C ++ предоставляет тип класса строк, который поддерживает все описанные выше операции, а также значительно большую функциональность. Давайте проверим следующий пример -

#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;
}

Когда приведенный выше код скомпилирован и исполнен, он производит результат следующим образом:

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