C++ String

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

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

Строка в стиле C

Строки в стиле C появились в языке C и продолжают поддерживаться в C++. Строка фактически представляет собой одномерный массив символов,nullСимвол\0завершающийся нулевым символом. Поэтому строка, завершающаяся нулевым символом, содержит символы, из которых состоит строка.

Следующее объявление и инициализация создаютEXAMPLEстроку. Поскольку нулевой символ сохраняется в конце массива, размер массива символов больше, чем словоEXAMPLEВ нём на один символ больше.

char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};

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

char site[] = "EXAMPLE";

Ниже показано представление в памяти строк, определённых в C/C++:

C/C++ 中的字符串表示

На самом деле не нужно ставитьnullСимвол помещается в конец строковой константы. При инициализации массива компилятор C++ автоматически\0его в конце строки. Давайте попробуем вывести строку выше:

Пример

#include <iostream> using namespace std; int main () { char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'}; cout << "Учебник для новичков:"; cout << сайт << endl; return 0; }

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

Example: EXAMPLE

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

Порядковый номерФункции & назначение
1strcpy(s1, s2);
Копирует строку s2 в строку s1.
2strcat(s1, s2);
Присоединяет строку s2 к концу строки s1. Конкатенация строк также может быть+числом, например:
string str1 = "example";
string str2 = "google";
string str = str1 + str2;
3strlen(s1);
Возвращает длину строки s1.
4strcmp(s1, s2);
Если s1 и s2 идентичны, возвращает 0; если s1<s2, возвращаемое значение меньше 0; если s1>s2, возвращаемое значение больше 0.
5strchr(s1, ch);
Возвращает указатель на первое вхождение символа ch в строке s1.
6strstr(s1, s2);
Возвращает указатель на первое вхождение строки s2 в строке s1.

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

Пример

#include <iostream> #include <cstring> using namespace std; int main () { char str1[13] = "example"; char str2[13] = "google"; char str3[13]; 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; return 0; }

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

strcpy( str3, str1) : example
strcat( str1, str2): examplegoogle
strlen(str1) : 12

Класс string в C++

Стандартная библиотека C++ предоставляетstringтип класса, который поддерживает все вышеперечисленные операции и добавляет множество других возможностей. Мы изучим этот класс в стандартной библиотеке C++, но сейчас давайте сначала посмотрим на следующий пример:

Сейчас вы, возможно, ещё не полностью понимаете этот пример, потому что до сих пор мы не обсуждали классы и объекты. Поэтому пока можете просто кратко посмотреть на этот пример и вернуться к его пониманию позже, после того как освоите концепции объектно-ориентированного программирования.

Пример

#include <iostream> #include <string> using namespace std; int main () { string str1 = "example"; string str2 = "google"; string 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; return 0; }

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

str3 : example
str1 + str2 : examplegoogle
str3.size() :  12
Другие расширения