Содержание
Цель работы
Изучить методику по созданию одномерных динамических символьный массивов при помощи конструкторов с захватом динамической памяти и деструкторов для их уничтожения, а также способа работы со строковыми объектами. Познакомиться с механизмом перегрузки операций.
Общая постановка
Пользовательский класс String должен содержать необходимые элемент-данные, создаваемые в динамической памяти.
Конструктор для создания строк | String(…); |
Деструктор | ~String(); |
Метод ввода исходной строки | Set(); |
Метод печати | void Print(…); |
➡ Код методов — вне пространства определения класса. Программа иллюстрирует прямой и косвенный способы обращения к методам.
Индивидуальные задания
Ввести строку символов S1, признак окончания ввода строки — нажатие клавиши Enter. Программа должна содержать перегруженную операцию «=», использование которой скопирует S1 в S2 при следующих условиях:
№ | Условие |
1 | Без двух первых и двух последних символов. |
2 | Без всех чисел, которые делятся на $2$. |
3 | Без всех цифр. |
4 | Без всех $a..z$. |
5 | Без всех $A..Z$. |
6 | Без скобок всех видов. |
7 | Подстроку до первого пробела. |
8 | Подстроку в фигурных «{}» скобках. |
9 | Подстроку до первой круглой скобки. |
10 | Подстроку после последнего пробела. |
11 | Подстроку со второго пробела. |
12 | Без каждого $3$-го символа. |
13 | Подстроку до последнего пробела. |
14 | Подстроку от последней цифры. |
15 | Подстроку в квадратных «[]» скобках. |
➡ На печать вывести исходную и преобразованную строки.
Образец выполнения (вариант №3)
Условие задания звучит так:
Без всех цифр
➡ В С-подобных языках есть встроенная функция int isdigit(char pch), которая проверяет свой символьный аргумент на десятичную цифру. В качестве ответа возвращается ненулевое значение, если аргументом является десятичная цифра.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | #include <iostream> // для консольного вывода #include <clocale> // для руссификации диалогов в программе using namespace std; // описание класса "Динамическая строка" class String { private: char *str; // отвечает за хранение значения строки public: String(char *s = "\0"); // параметрический конструктор ~String(); // деструктор void Set(void); // ввод строки с клавиатуры void Print(void); // вывод строки на экран String& operator= (String &pstring); // перегруженная операция присваивания по условию пропуска всех цифр }; // параметрический конструктор String::String(char *s) { this->str = new char[strlen(s) + 1]; strcpy(this->str, s); } // деструктор, удаляющий динамическую память из-под динамической строки String::~String() { delete []this->str; } // ввод значения строки с клавиатуры void String::Set(void) { const int MAX = 200; // максимальная длина строки char tmp[MAX]; cout << "Введите строку, закончив ввод нажатием клавиши Enter: "; gets(tmp); cout << endl; this->str = new char[strlen(tmp) + 1]; strcpy(this->str, tmp); } // вывод значения строки на экран void String::Print(void) { cout << this->str << endl; } // перегруженная операция присваивания String& String::operator=(String &pstring) { // сначала посчитаем, сколько цифр в заданной строке int k = 0; for(int i = 0; i < strlen(pstring.str); i++) if(isdigit(pstring.str[i]) != 0) k++; // выделяем память под преобразованную строку без учета десятичных цифр this->str = new char[strlen(pstring.str) - k + 1]; // копируем посимвольно всю информацию из заданной строки, пропуская десятичные цифры int insert = -1; for(int i = 0; i < strlen(pstring.str); i++) if(isdigit(pstring.str[i]) == 0) this->str[++insert] = pstring.str[i]; // закрываем новую строку нуль-терминатором this->str[++insert] = '\0'; return *this; } // главная функция программы int main(void) { setlocale(LC_ALL, "rus"); // руссификация диалогов программы String S1; // создаем пустую строку S1 S1.Set(); // вводим значение строки S1 с клавиатуры // выводим значение строки S1 на экран cout << "Строка S1: "; S1.Print(); String S2; // создаем пустую строку S2 S2 = S1; // копируем в строку S2 значение строки S1 без всех цифр // выводим значение строки S2 на экран cout << "Строка S2: "; S2.Print(); cout << endl << "Для завершения работы программы нажмите любую клавишу..."; cin.get(); // задержка программы, чтобы можно было просмотреть результат return 0; // завершение работы программы } |
Результаты работы программы


Стоимость заказа работы своего варианта
➡ Стоимость программы из любого варианта составляет $250$ рублей.
Для оформления заказа пишите на почту: proglabs@mail.ru.
Время нашего ответа обычно составляет не более $10$ минут.
Добавить комментарий