
- •Оглавление
- •1.2. Свойства языков программирования
- •1.3. Основные парадигмы программирования Процедурное программирование
- •Модульное программирование
- •Абстракция данных
- •Объектно-ориентированное программирование
- •Непечатные символы
- •Тема 2 Типы данных
- •2.1. Понятие переменной и объявление переменных
- •Объявление переменных
- •Встроенные типы данных
- •Размер памяти, выделяемой под встроенные типы данных
- •2.2. Константы и перечисления Константные переменные
- •Перечисления
- •2.3. Операции и выражения
- •Мультипликативные операции
- •Операции сравнения
- •Побитовые логические операции
- •Побитовые операции
- •Комментарии
- •Оператор while(пока)
- •Оператор do/while(выполнять/пока)
- •Оператор for(цикл)
- •Оператор множественного выбора switch
- •Операторы breakиcontinue
- •Тема 4 Массивы
- •4.1.Определение, объявление и инициализация массивов
- •Объявления и инициализация массивов в программе
- •4.2. Сортировка массивов Пузырьковая сортировка
- •Сортировка вставками
- •4.3. Поиск в массивах Линейный поиск
- •Двоичный поиск
- •4.4. Многомерные массивы
- •Тема 5 Указатели Объявления и инициализация переменных указателей
- •5.1. Операции над указателями
- •5.2. Выражения и арифметические действия с указателями
- •5.3. Взаимосвязи между указателями и массивами
- •5.4. Массивы указателей
- •5.5. Динамическое выделение памяти под массивы
- •Тема 6 Функции
- •6.2. Определения функций
- •Генерация случайных чисел
- •6.3. Классы памяти и область действия Классы памяти
- •Область действия
- •6.4. Рекурсия
- •6.5. Ссылки и ссылочные параметры
- •Вызов функций по ссылке с аргументами указателями
- •6.6. Использование спецификатораconstс указателями
- •6.7. Перегрузка функций
- •Аргументы по умолчанию
- •6.8. Передача массивов в функции
- •6.9. Указатель на функцию
- •6.10. Командная строка аргументов
- •6.11 Неопределенное количество аргументов
- •Тема 7 Введение в обработку строк
- •7.1. Работа со строками в с
- •Понятие символов и строк в с
- •Функции для работы со строками
- •Определение длины строки
- •Сложение двух строк (конкатенация)
- •Добавление к исходной строке указанного количества символов.
- •Копирование строки в другую строку
- •Сравнение строк
- •Получение строки от пользователя
- •Тема 8 Работа с файлами
- •Открытие файла
- •Чтение из файла символа или строки символов
- •Запись символа или строки символов в файл
- •Смещение внутри файла
- •Значения параметра fromwhereфункцииfseek
- •Закрытие файла
- •Тема 9 Компоновка программ и препроцессор
- •9.1. Компоновка программ
- •Проблема использования общих функций и имен
- •Использование включаемых файлов
- •9.2. Препроцессор
- •Определение макросов
- •Условная компиляция
- •Дополнительные директивы препроцессора
- •Тема 10 Структуры
- •10.1. Определение структур и доступ к элементам
- •Доступ к элементам структур
- •Использование структур
- •10.2. Битовые поля
- •10.3. Объединения
- •10.4. Построение связных списков на основе структур с самоадресацией
- •Создание простого связного списка
- •Очереди
- •Деревья
- •Список рекомендуемой литературы
Получение строки от пользователя
При чтении с экрана строки используется объект cinтак же, как и при чтении переменных другого типа. Но чтение при этом происходит до первого символа-разделителя. К символам разделителям относится и пробел. Это значит, что от пользователя будет получена не вся строка целиком, а только первое слово. Чтобы получить всю строку, нужно воспользоваться функциейgetline, определенной в объектеcin(рис. 7.7). Перед использованием этой функции нужно убедиться, что под строку выделена память.
#include <iostream>
using namespace std;
int main()
{
char str[255];
cout<<"Enter a string"<<endl;
cin.getline(str, 255);
cout<<str<<endl;
return 0;
}
Рис. 7.7. Получение строки от пользователя
7.2. Работа со строками в С++
В С++ существует более простой способ работы со строками [2]. Нужно подключить заголовочный файл stringи использовать стандартное пространство имен, где определен типstring. И теперь строка – это не массив символов, а новый тип данных.
Пример работы с такой строкой представлен на рис. 7.8.
#include <iostream>
#include <string>
using namespace std;
int main(){
string s0 = "abcde"; //создаем переменную типа string
string s1 = "fg"; //создаем еще одну переменную типа string
// Конкатенация двух строк.
string s = s0 + s1;
cout<<s<<"\n";
// Получаем символ на определенном месте
char ch0 = s0.at(1); //получаем второй символ строки
cout<<ch0<<"\n";
char ch1 = s0[3]; //получаем четвертый символ строки
cout<<ch1<<"\n";
// Выясняем, не пустая ли строка
if (s0.empty()){
cout << "String is empty"<<"\n";
}
else{
cout << "String isn't empty"<<"\n";
}
// Обмен значения двух строк
swap(s0, s1); //функция обмена двух переменных
// Присваиваем и сравниваем 2 строки
s1 = s0; //возможно прямое присваивание двух строк
if(s1 == s0) {//и сравнение двух строк как обычных переменных
cout << "Strings are equal"<<"\n"; }
else{
cout << "Strings are not equal"<<"\n"; }
// Чтение введенной с клавиатуры строки
getline(cin, s1);
cout<<s1;
// Получение длины строки
cout<<s1.length();
return 0;
}
Рис. 7.8. Использование строк в С++
Тема 8 Работа с файлами
Все до сих пор написанные программы читали из стандартного ввода и писали в стандартный вывод [11], относительно которых предполагалось, что они магическим образом предоставлены программе местной операционной системой.
Теперь научимся писать программы, которые считывают информацию из текстового файла и записывают информацию в текстовый файл. Используем для этого функции библиотеки stdio.h.
Открытие файла
Для начала работы с файлом его необходимо открыть. Делает это функция fopenбиблиотекиstdio.h
FILE * fopen(char * filename, char * type);
Функция fopenоткрывает файл, именованный параметромfilename, и связывает его с соответствующим потокомstream. Функцияfopenв качестве результата возвращает адресный указатель, который будет идентифицировать потокstreamв последующих операциях. Строкаtype, используемая в функцииfopen,может принимать следующие значения:
r- открытие файла только для чтения;
w- создание файла для записи;
а- присоединение; открытие для записи в конец файла или создание для записи, если файл не существует;
r+- открытие существующего файла для обновления (чтения и записи);
w+- создание нового файла для изменения;
a+- открытие для присоединения; открытие (или создание, если файл не существует) для обновления в конец файла.
Если данный файл открывается или создается в текстовом режиме, то можно приписать символ tк значению параметраtype(rt,w+t, и т.д.); аналогично, для спецификации бинарного режима можно к значению параметраtypeдобавить символb(wb,a+b, и т.д.). Если в параметреtypeотсутствуют символыtилиb, режим будет определяться глобальной переменной_fmode. Если переменная_fmodeимеет значениеO_BINARY, файлы будут открываться в бинарном режиме, иначе, если_fmodeимеет значениеO_TEXT, файлы открываются в текстовом режиме. Данные константыO_...определены в файлеfcntl.h.
При успешном завершении fopenвозвращает указатель на открытый потокstream. В случае ошибки функция возвращает нуль (NULL).