Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование задач с применением структурированных данных. Лабораторный практикум.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Функция
Назначение
strncpy_s(s1, s2, n)
Функция копирует не более n символов из строки s2 в s1 и возвращает s1.
strpbrk(s1, s2)
Функция ищет символ одной строки в другой. Функция воз-
возвращается NULL (пустое значение указателя).
strrchr(s, ch)
функция ищет символ в строке. Функция возвращает указа-
нет - возвращает NULL.
strstr(s1, s2)
Функция ищет первое вхождение подстроки s2 в строке s1.
начинается s2 или NULL в случае неудачи
isalnum(c)
возвращает значение true, если с является буквой или циф­рой, и false в других случаях
возвращает значение true, если с является буквой, и false в других случаях
возвращает значение true, если с является цифрой, и false в других случаях
возвращает значение true, если с является буквой нижнего регистра, и false в других случаях
возвращает значение true, если с является буквой верхнего регистра, и false в других случаях
возвращает значение true, если с является пробелом, и false в других случаях
если символ с, является символом нижнего регистра, то
регистре, иначе символ возвращается без изменений.
поиск первого вхождения символа с в строке s. В случае
ется ноль.
определяет длину начального сегмента строки s1, содержа­щего те символы, которые не входят в строку s2
возвращает длину начального сегмента строки s1, содержа­щего только те символы, которые входят в строку s2
Возвращает указатель первого вхождения любого символа строки s2 в строке s1
atof(s1)
преобразует строку s1 в тип double
atoi(s1)
преобразует строку s1 в тип int
atol(s1)
преобразует строку s1 в тип long int
isalpha(c)
Окончание табл. 4
вращает указатель на символ, являющийся первым вхожде­нием любого из символов из
s2 в строку s1, если его нет,
тель на первое вхождение символа ch в строку s, если его
Функция возвращает указатель на элемент из s1, с которого
isdigit(c)
islower(c)
isupper(c)
isspace(c)
toupper(c)
strchr(s,c)
strcspn(s1,s2)
strspn(s1,s2)
функция возвращает преобразованный символ с в верхнем
удачного поиска возвращает указатель на место первого вхождения символа с. Если символ не найден, то возвраща-
strprbk(s1,s2)
21

2.2. Пример программы для работы со строками

Пример. В строке размером до 30 символов определить, сколько раз
встречается определенный символ. Строка и символ вводятся пользователем. Вывести строку, символ и найденное количество.
Текст программы на языке С++ приведен ниже.
#include <Windows.h> // Добавляется для ввода русских букв #include <iostream> // Подключение заголовочного файла // с функциями ввода-вывода
using namespace std; // Использование пространства имен std int _main()
{
SetConsoleCP(1251); // Возможность вводить и отображать SetConsoleOutputCP(1251); // русские буквы char str[30]; // Строка, задаваемая пользователем char s; // Символ, задаваемый пользователем cout << "Введите строку" << endl; cin.getline(str,30); // Ввод строки в переменную str cout << "Введите символ" << endl; cin >> s; // Ввод символа int k = 0; // Инициализация счетчика для расчета
// количества символов s в строке str // Цикл подсчета количества символов s в строке str // strlen – функция определения длины строки for (int i = 0; i < strlen(str); i++) if (str[i] == s) k++; // Вывод результата на экран cout << "Количество вхождений символа " << s << " в строку \n" <<
str << "\n равно " << k << endl;
system("pause"); // Ожидание нажатия клавиши }
Для отображения русских букв необходимо на заглавии окна при вводе
данных нажать правой кнопкой мыши, выбрать пункт «Свойства», выбрать шрифт Luсida Console.
22

2.3. Первое задание к лабораторной работе № 2

Вариант
Задание
1
В текстовой строке проверить, какая буква встречается чаще – 'a',
вое сообщение.
2
. В текстовой строке проверить правильность расстановки круглых
личеству закрывающих).
3
В текстовой строке подсчитать число вхождений тройки символов 'abc'.
4
В текстовой строке определить количество слов, начинающихся с буквы 'a'.
5
В текстовой строке определить количество слов, заканчивающихся буквой 'w'.
6
В текстовой строке определить количество слов, начинающихся и заканчивающихся одной и той же буквой.
7
В текстовой строке определить количество слов, в которых есть хотя бы одна буква 'd'.
8
В текстовой строке определить количество слов, в которых содер­жится ровно три буквы ‘e’.
9
В текстовой строке найти самое длинное слово и вывести его на экран вместе с его длиной.
10
В текстовой строке заменить все пробелы знаком '_'.
11
В текстовой строке поменять все символы '!' на '?'.
12
На основе текстовой строки, введенной пользователем, создать но-
нескольких подряд идущих пробелов оставить один).
Задание
При выполнении задания необходимо:
- написать и отладить программу на С++ в консольном режиме в соответ-
ствии с вариантом задания;
- варианты задания приведены в табл. 5; номер варианта совпадает с по-
рядковым номером студента в списке;
- проверить работу программы в консольном режиме.
Отчет
Отчет должен содержать титульный лист, вариант задания, текст про-
граммы с комментариями, скриншот результатов работы программы.
Варианты первого задания для реализации программы со строками
Таблица 5
'b' или ‘c’. В качестве результата вывести соответствующее тексто-
скобок (т.е. соответствует ли количество открывающих скобок ко-
вую строку, из которой будут удалены все лишние пробелы (т.е. из
23
Продолжение табл. 5
Вариант
Задание
13
На основе текстовой строки, введенной пользователем, создать но-
символ 'f'
14
На основе текстовой строки, введенной пользователем, создать но­вую, из которой будут удалены все знаки ‘-’ и ‘+’.
15
В текстовой строке найти количество символов арифметических операций (т.е. знаков ‘+’, ‘-‘, ‘/’ и ‘*’).
16
На основе текстовой строки, введенной пользователем, создать но­вую строку, где каждый третий символ заменен знаком ‘#’.
17
Подсчитать, сколько раз пара 'th' входит в заданный текст.
18
В текстовой строке найти самое короткое слово и вывести его на экран вместе с его длиной.
19
В строке заданы фамилия, имя и отчество студента (именно в та­ком порядке). Напечатайте его фамилию и инициалы.
20
Дана текстовая строка, слова в которой разделены пробелами. Найти количество слов в тексте.
21
Напишите программу, которая позволяет ввести строку и вывести
не останется один символ.
22
Дана текстовая строка. Определить является ли она положитель­ным или отрицательным целым числом.
23
В текстовой строке найти количество точек и запятых.
24
В текстовой строке определить количество слов, в которых содер­жатся буквы ‘x’ и ‘y’ (и та, и другая вместе).
25
Дана текстовая строка. Найти в ней количество цифр ‘1’, ‘2’ и ‘3’.
26
Дана текстовая строка. Найти в ней количество слов, длина кото­рых равна 5 символам.
27
В текстовой строке заменить все символы ‘@’ на ‘#’.
28
Дана текстовая строка. Найти в ней количество нулей.
29
В текстовой строке проверить, какая буква встречается чаще – 'd',
вое сообщение.
30
В текстовой строке проверить правильность расстановки фигур-
количеству закрывающих).
31
В текстовой строке подсчитать число вхождений тройки символов 'qwe'.
32
В текстовой строке определить количество слов, начинающихся с буквы 'c'.
33
В текстовой строке определить количество слов, заканчивающихся буквой 'e'.
вую строку, в которой все пары символов 'ph' будут заменены на
ее, сокращая каждый раз на один символ до тех пор, пока в строке
'k' или ‘g’. В качестве результата вывести соответствующее тексто-
ных скобок (т.е. соответствует ли количество открывающих скобок
24
Окончание табл. 5
Вариант
Задание
34
В текстовой строке определить количество слов, начинающихся и заканчивающихся одной и той же буквой ‘e’.
35
В текстовой строке определить количество слов, в которых есть хотя бы одна буква 's'.
36
В текстовой строке определить количество слов, в которых содер­жится ровно три буквы ‘k’.
37
В текстовой строке найти самое длинное слово, начинающееся с символа ‘a’ и вывести его на экран вместе с его длиной.
38
В текстовой строке заменить все тире знаком '_'.
39
В текстовой строке поменять все символы '?' на '!'.
40
На основе текстовой строки, введенной пользователем, создать но­вую строку, из которой будут удалены все символы ‘*’.

2.4. Общие рекомендации по работе с данными типа string

Тип данных string требует подключения к программе заголовочного фай-
ла <string>. Основные действия с подобными строками выполняются с помо­щью стандартных операций и методов, а длина строки изменяется динамически в соответствии с потребностями.
Простейший пример использования данных типа string.
#include <iostream> // Подключение заголовочного файла // с функциями ввода-вывода
#include <string> using namespace std; // Определение пространства имен int main()
{ string s1, s2, s3, s4; s1 = "new string"; cout << "Enter string " << endl; getline(cin,s2); cout << s2 << endl; s3 = s1; if (s3 > s2) cout << s3 << endl; s4 = s1 + s2; cout << s4 << endl; system("pause"); }
25
Основные методы для работы со строками приведены в табл. 6.
Функция
Назначение
s.append(str)
добавляет в конец строки строку str
s.assign(str)
присваивает строке s значение строки str
s.clear()
отчищает строку, т.е. удаляет все элементы в ней
s.compare(str)
сравнивает строку s со строкой str и возвращает 0 в слу­чае совпадения
копирует из строки s в строку C(может быть как строка
с N-го символа
bool b = s.empty()
если строка пуста, возвращает true, иначе false
s.erase(I,N)
удаляет N элементов с I-го символа
s.find(str,I)
ищет строку str начиная с I- го символа
s.insert(pos, s1)
вставляет строку s1 в строку s, начиная с позиции pos
int len=s.length()
записывает в len длину строки
s.push_back(symbol)
добавляет в конец строки символ
s.replace(index,
str=s.substr(n,m)
возвращает m символов, начиная с позиции n
s.swap(str)
меняет содержимое s и str местами.
s.size()
возвращает число элементов в строке.
Основные методы для работы со строками класса string
Таблица 6
s.copy(C, I, N)
типа string, так и строка типа char) I символов, начиная
берет n первых символов из str и заменяет символы
n,str)
строки s на них, начиная с позиции index
Чтобы обращаться к отдельным символам строки типа string, можно вос­пользоваться операцией взятия индекса ([]), или при помощи метода at(). Например:
cout << s1[1] << endl;
cout << s1.at(2) << endl;
Если индекс превышает длину строки, порождается исключение out_of_range.

2.5. Второе задание к лабораторной работе № 2

Задание
При выполнении задания необходимо:
- написать и отладить программу на С++ в консольном режиме в соответ-
ствии с вариантом задания;
- варианты задания приведены в табл. 7; номер варианта совпадает с по-
рядковым номером студента в списке;
- проверить работу программы в консольном режиме.
26
Отчет
Вариант
Задание
1
В текстовой строке определить количество слов, начинающихся и заканчивающихся одной и той же буквой.
2
В текстовой строке определить количество слов, в которых есть хотя бы одна буква 'd'.
3
В текстовой строке определить количество слов, в которых содер­жится ровно три буквы ‘e’.
4
В текстовой строке найти самое длинное слово и вывести его на экран вместе с его длиной.
5
В текстовой строке заменить все пробелы знаком '_'.
6
В текстовой строке поменять все символы '!' на '?'.
7
На основе текстовой строки, введенной пользователем, создать но-
нескольких подряд идущих пробелов оставить один).
8
На основе текстовой строки, введенной пользователем, создать но-
символ 'f'.
9
На основе текстовой строки, введенной пользователем, создать но­вую, из которой будут удалены все знаки ‘-’ и ‘+’.
10
В текстовой строке найти количество символов арифметических операций (т.е. знаков ‘+’, ‘-‘, ‘/’ и ‘*’).
11
На основе текстовой строки, введенной пользователем, создать но­вую строку, где каждый третий символ заменен знаком ‘#’.
12
Подсчитать, сколько раз пара 'th' входит в заданный текст.
13
В текстовой строке найти самое короткое слово и вывести его на экран вместе с его длиной.
14
В строке заданы фамилия, имя и отчество студента (именно в та­ком порядке). Напечатайте его фамилию и инициалы.
15
Дана текстовая строка, слова в которой разделены пробелами. Найти количество слов в тексте.
Отчет должен содержать титульный лист, вариант задания, текст про-
граммы с комментариями, скриншот результатов работы программы.
Варианты второго задания для реализации программы со строками
Таблица 7
вую строку, из которой будут удалены все лишние пробелы (т.е. из
вую строку, в которой все пары символов 'ph' будут заменены на
27
Продолжение табл. 7
Вариант
Задание
16
Напишите программу, которая позволяет ввести строку и вывести
не останется один символ.
17
Дана текстовая строка. Определить является ли она положитель­ным или отрицательным целым числом.
18
В текстовой строке проверить, какая буква встречается чаще – 'a',
вое сообщение.
19
В текстовой строке проверить правильность расстановки круглых
личеству закрывающих).
20
В текстовой строке подсчитать число вхождений тройки символов 'abc'.
21
В текстовой строке определить количество слов, начинающихся с буквы 'a'.
22
В текстовой строке определить количество слов, заканчивающихся буквой 'w'.
23
Дана текстовая строка. Найти в ней количество нулей.
24
В текстовой строке заменить все символы ‘@’ на ‘#’.
25
Дана текстовая строка. Найти в ней количество слов, длина кото­рых равна 5 символам.
26
Дана текстовая строка. Найти в ней количество цифр ‘1’, ‘2’ и ‘3’.
27
В текстовой строке определить количество слов, в которых содер­жатся буквы ‘x’ и ‘y’ (и та, и другая вместе).
28
В текстовой строке найти количество точек и запятых.
29
В текстовой строке подсчитать количество букв ‘a’ в последнем слове.
30
Из текстовой строки получить новую текстовую строку, в которую
тексте нет двоеточия, то сообщить об этом.
31
В текстовой строке подсчитать наибольшее количество идущих
этом.
32
В текстовой строке заменить каждую группу символов child груп- пой символов children.
33
В текстовой строке удалить все символы 1, 2, 3.
ее, сокращая каждый раз на один символ до тех пор, пока в строке
'b' или ‘c’. В качестве результата вывести соответствующее тексто-
скобок (т.е. соответствует ли количество открывающих скобок ко-
записать все символы до первого двоеточия включительно. Если в
подряд символов ‘*’. Если такого символа нет, то сообщить об
28
Окончание табл. 7
Вариант
Задание
34
В текстовой строке удалить каждый повторный символ из двух идущих подряд символов.
35
В текстовой строке каждый символ ’_’ заменить двумя символами ‘!’.
36
В текстовой строке определить количество слов, в которых есть три буквы ‘e’.
37
В текстовой строке заменить все символы ‘;’ на символ ‘,’.
38
В текстовой строке заменить каждый символ ‘.’ на символ ‘…’.
39
В текстовой строке заменить каждую группу стоящих рядом точек одной точкой.
40
Из текстовой строки получить новую текстовую строку, в которую
двоеточия, то сообщить об этом.
записать все символы после первого двоеточия. Если в тексте нет

2.6. Общие рекомендации по работе со структурами

Данные типа структуры могут содержать элементы разных типов. В языке С++ структура является видом класса и обладает всеми его свойствами. При работе со структурами в ряде задач обработки данных достаточно использовать структуры так, как они описаны в языке С:
struct [ имя_типа ] {
тип_1 элемент_1;
тип_2 элемент_2;
…
тип_n элемент_n;
} [список_описателей];
Элементы структуры называются полями структуры. Поля структуры мо­гут иметь любой тип, кроме типа этой же структуры. Поля структуры также мо­гут быть указателями на структуру.
Описание структуры определяет новый тип, имя которого можно исполь­зовать в дальнейшем наряду со стандартными типами, например:
29
struct Worker{ // описание нового типа Worker
ФИО
Курс
Группа
Матем.
Прог.
Физ.
Ср. балл
char fio[30];
int age, code;
double zarpl;
}; // описание структуры заканчивается точкой с запятой
// определение массива типа Worker
Worker mas_struct[100];
Для доступа к полям структуры указывают имя структуры, ставят точку, записывают имя поля. Например:
Worker worker, mas_struct[100];
worker.fio = "Миронов";
mas_struct[8].code = 215;

2.7. Пример программы для работы со структурами

Пример. Заполнить массив из 3 записей следующей структуры:
– ФИО студента;
– курс;
– группа;
– оценка по математике;
– оценка по программированию;
– оценка по физике.
Вывести на экран массив записей в виде таблицы следующего вида:
Средний балл рассчитать по всем трем оценкам.
Текст программы на языке С++ приведен ниже.
#include <iostream> // Подключение заголовочного файла
// с функциями ввода-вывода
#include <iomanip>
#include <string>
using namespace std; // Определение пространства имен
int main()
{
const int n = 3; // Размерность массива со структурами
const int m = 77; // Ширина таблицы в символах
// Понадобится для рисования таблицы
setlocale(LC_ALL, "Russian");
// Описание типа структуры
struct stud {
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]