Глава 6. Стандартная библиотека #
6.3 Строки и потоки #
1. Класс string #
1.1 Основы работы с классом string #
Класс string
из стандартной библиотеки C++ предоставляет мощный и удобный способ работы со строками, избавляя от низкоуровневых操раций с символьными массивами.
#include <string>
#include <iostream>
int main() {
// Создание строк различными способами
std::string str1 = "Привет, мир!"; // Инициализация строки
std::string str2("Другая строка"); // Конструктор с параметром
std::string str3(5, 'A'); // Строка из 5 символов 'A'
// Основные операции
std::cout << str1.length() << std::endl; // Длина строки
std::cout << str1 + " " + str2 << std::endl; // Конкатенация
// Доступ к символам
char ch = str1[2]; // Доступ по индексу
// Изменение строки
str1.append(" Дополнительный текст"); // Добавление в конец
str1.insert(0, "Начало: "); // Вставка в начало
str1.erase(5, 3); // Удаление подстроки
}
1.2 Методы класса string #
Класс string
предоставляет множество полезных методов:
find()
: Поиск подстрокиsubstr()
: Извлечение подстрокиcompare()
: Сравнение строкempty()
: Проверка на пустоту
std::string text = "Пример строки для демонстрации";
size_t pos = text.find("строки"); // Найти позицию подстроки
std::string sub = text.substr(7, 6); // Извлечь подстроку
int result = text.compare("Другая строка"); // Сравнить строки
bool isEmpty = text.empty(); // Проверить на пустоту
2. Работа с потоками ввода-вывода #
2.1 Базовые потоки #
C++ предлагает три основных потока для ввода-вывода:
cin
: Стандартный поток вводаcout
: Стандартный поток выводаcerr
: Поток вывода ошибок
#include <iostream>
#include <string>
int main() {
// Ввод с клавиатуры
std::string name;
int age;
std::cout << "Введите имя: ";
std::cin >> name;
std::cout << "Введите возраст: ";
std::cin >> age;
// Вывод данных
std::cout << "Имя: " << name << ", Возраст: " << age << std::endl;
// Вывод ошибки
std::cerr << "Пример сообщения об ошибке" << std::endl;
}
2.2 Манипуляторы потоков #
Манипуляторы позволяют форматировать вывод:
#include <iostream>
#include <iomanip>
int main() {
double pi = 3.14159265359;
// Форматирование вывода
std::cout << std::fixed; // Фиксированная точность
std::cout << std::setprecision(2); // 2 знака после запятой
std::cout << pi << std::endl; // Выведет 3.14
// Установка ширины и выравнивания
std::cout << std::setw(10); // Ширина поля 10 символов
std::cout << std::right; // Выравнивание вправо
std::cout << 42 << std::endl;
}
3. Форматированный ввод-вывод #
3.1 Чтение и запись структурированных данных #
#include <iostream>
#include <sstream>
#include <string>
struct Person {
std::string name;
int age;
};
int main() {
// Преобразование строки в поток
std::string input = "Иван 25";
std::istringstream iss(input);
Person person;
iss >> person.name >> person.age;
// Преобразование потока в строку
std::ostringstream oss;
oss << "Имя: " << person.name << ", Возраст: " << person.age;
std::string output = oss.str();
std::cout << output << std::endl;
}
4. Работа с файлами #
4.1 Основы файлового ввода-вывода #
#include <fstream>
#include <string>
#include <iostream>
int main() {
// Запись в файл
std::ofstream outFile("example.txt");
if (outFile.is_open()) {
outFile << "Привет, файл!" << std::endl;
outFile.close();
}
// Чтение из файла
std::ifstream inFile("example.txt");
if (inFile.is_open()) {
std::string line;
while (std::getline(inFile, line)) {
std::cout << line << std::endl;
}
inFile.close();
}
// Добавление в файл
std::ofstream appendFile("example.txt", std::ios::app);
if (appendFile.is_open()) {
appendFile << "Новая строка" << std::endl;
appendFile.close();
}
}
4.2 Режимы открытия файлов #
Основные режимы открытия файлов:
std::ios::in
: Открытие для чтенияstd::ios::out
: Открытие для записиstd::ios::app
: Добавление в конец файлаstd::ios::binary
: Открытие в бинарном режиме
Заключение #
В этой главе мы рассмотрели основные возможности работы со строками и потоками в C++. Класс string
предоставляет удобные методы работы со строками, а механизмы потоков ввода-вывода позволяют эффективно обрабатывать данные как из стандартных источников, так и из файлов.
Ключевые моменты:
- Использование класса
string
для работы со строками - Применение потоков
cin
,cout
,cerr
- Форматирование вывода с помощью манипуляторов
- Работа с файлами через
ifstream
,ofstream
- Преобразование между строками и потоками
Практикуйте использование этих инструментов, и они станут незаменимыми в вашей работе с C++.