Учебники

Строки C ++

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

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

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

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

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

 char приветствие [6] = {'H', 'e', ​​'l', 'l', 'o', '\ 0'};

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

 char приветствие [] = "Привет";

Следующее представление памяти определенной выше строки в C / C ++ —

Строковая презентация в C / C ++

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

Live Demo

 #include <iostream>

 использование пространства имен std;

 int main () {

    char приветствие [6] = {'H', 'e', ​​'l', 'l', 'o', '\ 0'};

    cout << "Приветственное сообщение:";
    cout << приветствие << endl;

    вернуть 0;
 }

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

 Приветственное сообщение: Привет

C ++ поддерживает широкий спектр функций, которые обрабатывают строки с нулевым символом в конце —

Sr.No Функция и цель
1

strcpy (s1, s2);

Копирует строку s2 в строку s1.

2

strcat (s1, s2);

Объединяет строку s2 в конец строки s1.

3

StrLen (S1);

Возвращает длину строки s1.

4

strcmp (s1, s2);

Возвращает 0, если s1 и s2 одинаковы; меньше 0, если s1 <s2; больше 0, если s1> s2.

5

strchr (s1, ch);

Возвращает указатель на первое вхождение символа ch в строке s1.

6

strstr (s1, s2);

Возвращает указатель на первое вхождение строки s2 в строку s1.

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.

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

Live Demo

 #include <iostream>
 #include <cstring>

 использование пространства имен std;

 int main () {

    char str1 [10] = "Привет";
    char str2 [10] = "Мир";
    char str3 [10];
    int len;

    // копируем str1 в str3
    strcpy (str3, str1);
    cout << "strcpy (str3, str1):" << str3 << endl;

    // объединяет str1 и str2
    strcat (str1, str2);
    cout << "strcat (str1, str2):" << str1 << endl;

    // общая длина str1 после объединения
    len = strlen (str1);
    cout << "strlen (str1):" << len << endl;

    вернуть 0;
 }

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

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

Строковый класс в C ++

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

Live Demo

 #include <iostream>
 #include <string>

 использование пространства имен std;

 int main () {

    string str1 = "Hello";
    строка str2 = "Мир";
    строка str3;
    int len;

    // копируем str1 в str3
    str3 = str1;
    cout << "str3:" << str3 << endl;

    // объединяет str1 и str2
    str3 = str1 + str2;
    cout << "str1 + str2:" << str3 << endl;

    // общая длина str3 после конкатенации
    len = str3.size ();
    cout << "str3.size ():" << len << endl;

    вернуть 0;
 }

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