Строки в C++: C-строки vs std::string
C++ предоставляет два типа строковых представлений:
- C-стиль (символьные массивы).
- Класс
string, появившийся со стандартным C++.
C-стиль: символьные строки
C-строки возникли в языке C и поддерживаются в C++. Это одномерный массив символов, завершённый нулевым символом '\0'. Таким образом, null-terminated строка содержит символы строки, за которыми следует null.
Объявление и инициализация строки, состоящей из слова "Hello". Размер массива на единицу больше длины слова, чтобы разместить нуль-терминатор:
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
Следуя правилу инициализации массивов, можно записать короче:
char greeting[] = "Hello";
Память для такой строки выглядит так:
На самом деле, нуль-символ в конце строковой константы ставит компилятор автоматически при инициализации массива. Попробуем вывести строку:
Live Demo#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++ поддерживает широкий набор функций для манипуляции null-terminated строками:
| № | Функция и назначение |
|---|---|
| 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. |
Пример использования некоторых функций:
Live Demo#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str1[10] = "Hello";
char str2[10] = "World";
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;
return 0;
}
Результат:
strcpy(str3, str1) : Hello strcat(str1, str2): HelloWorld strlen(str1) : 10
Класс string в C++
Стандартная библиотека C++ предоставляет класс string, поддерживающий все вышеуказанные операции и многое другое. Пример:
Live Demo#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "Hello";
string str2 = "World";
string str3;
int len;
// копия str1 в str3
str3 = str1;
cout << "str3 : " << str3 << endl;
// конкатенация
str3 = str1 + str2;
cout << "str1 + str2 : " << str3 << endl;
// длина str3
len = str3.size();
cout << "str3.size() : " << len << endl;
return 0;
}
Результат:
str3 : Hello str1 + str2 : HelloWorld str3.size() : 10
Язык C
- Строки в C#: основы, операции и продвинутые техники
- Освоение операторов C++: полное руководство с практическими примерами
- Комментарии в C++: лучшие практики для читаемого и поддерживаемого кода
- Шаблоны классов в C++: практическое руководство
- Освоение строк в Java: создание, методы и лучшие практики
- Строковые представления в Java Enums: настройка toString() и лучшие практики
- Переменные и типы данных в C++: подробное руководство по int, double, char, string, bool
- Функции строк в C++: strcpy, strcat, strlen, strcmp — практические примеры
- Строки в C просто: объявление, ввод, вывод и библиотечные функции
- Класс String в Java: создание, манипуляции и основные методы