Массивы и строки (std::string) в C++

Массивы и строки в C++: статические массивы, перебор, std::string и основные операции со строками.

Массив — набор элементов одного типа, расположенных подряд в памяти. std::string — удобный класс для работы с текстом.

Статический массив

Размер задаётся при объявлении и не меняется. Индексация с нуля.

#include <iostream>

int main() {
    int nums[5] = {10, 20, 30, 40, 50};

    std::cout << nums[0] << "\n";   // 10 — первый элемент
    std::cout << nums[4] << "\n";   // 50 — последний

    nums[2] = 99;                    // изменяем третий элемент
    std::cout << nums[2] << "\n";   // 99
    return 0;
}

Вывод:

10
50
99

Выход за границы массива (nums[5] при размере 5) — неопределённое поведение: программа может упасть или молча испортить данные. Это классическая ловушка C++.

Перебор массива

#include <iostream>

int main() {
    int scores[4] = {85, 92, 78, 96};
    int sum = 0;

    for (int i = 0; i < 4; i++) {
        sum += scores[i];
    }
    std::cout << "Сумма: " << sum << "\n";
    std::cout << "Среднее: " << sum / 4.0 << "\n";
    return 0;
}

Вывод:

Сумма: 351
Среднее: 87.75

Современный C++ предлагает range-based for — компактнее и безопаснее:

int arr[] = {1, 2, 3, 4, 5};
for (int x : arr) {
    std::cout << x << " ";
}
// Вывод: 1 2 3 4 5

std::string — строки в C++

std::string из заголовка <string> намного удобнее, чем массивы символов в стиле C.

#include <iostream>
#include <string>

int main() {
    std::string s = "Привет";
    s += ", мир!";           // конкатенация через +=

    std::cout << s << "\n";
    std::cout << s.length() << "\n";      // длина строки
    std::cout << s[0] << "\n";            // первый символ
    std::cout << s.substr(0, 6) << "\n";  // подстрока
    return 0;
}

Вывод:

Привет, мир!
12
П
Привет

Основные методы std::string

Метод

Действие

length() / size()

длина строки

substr(pos, len)

подстрока

find(str)

позиция подстроки (или npos)

empty()

пустая ли строка

append(str)

добавить в конец

Коротко

  • Массив — фиксированный набор элементов одного типа; индексация с нуля.
  • Выход за границы — неопределённое поведение: всегда проверяйте индекс.
  • Range-based for (for (int x : arr)) — современный способ перебора.
  • std::string лучше char[]: безопаснее, богаче методами, понятнее.
Проверьте себя
1. С какого индекса начинается массив в C++?
A1
B0
C-1
DЗависит от типа
2. Что произойдёт при обращении к arr[10] для массива размером 5?
AВернётся 0
BПрограмма выведет ошибку и продолжит работу
CНеопределённое поведение — программа может упасть или испортить данные
DКомпилятор не допустит такой код
3. Какой метод std::string возвращает длину строки?
Alen()
Bsize() или length()
Ccount()
Dwidth()
Поддержать проект