C ++ обеспечивает следующие два типа строковых представлений —
- Строка символов в стиле C
- Тип класса string, представленный в стандарте C ++.
Строка символов C-Style
Строка символов в стиле C возникла в языке C и продолжает поддерживаться в C ++. Эта строка на самом деле является одномерным массивом символов, который заканчивается нулевым символом ‘\ 0’. Таким образом, строка с нулевым символом в конце содержит символы, которые составляют строку, за которой следует ноль .
Следующее объявление и инициализация создают строку, состоящую из слова «Hello». Чтобы держать нулевой символ в конце массива, размер массива символов, содержащего строку, на один больше, чем количество символов в слове «Hello».
char приветствие [6] = {'H', 'e', 'l', 'l', 'o', '\ 0'};
Если вы следуете правилу инициализации массива, вы можете написать приведенное выше утверждение следующим образом:
char приветствие [] = "Привет";
Следующее представление памяти определенной выше строки в C / C ++ —
На самом деле, вы не помещаете нулевой символ в конец строковой константы. Компилятор C ++ автоматически помещает ‘\ 0’ в конец строки, когда инициализирует массив. Давайте попробуем напечатать вышеупомянутую строку —
#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.
Следующий пример использует несколько из вышеупомянутых функций —
#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 ++ предоставляет тип строкового класса, который поддерживает все операции, упомянутые выше, и, кроме того, гораздо больше функциональности. Давайте проверим следующий пример —
#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; }
Когда приведенный выше код компилируется и выполняется, он выдает результат, который выглядит следующим образом: