OOP / лаб 4
.docxМинистерство образования и науки Украины
Одесский национальный политехнический университет
Кафедра системного программного обеспечения.
Протокол лабораторной работы № 4
По дисциплине:
Объектно-ориентированное программирование
Вариант 10
Выполнил
студент AC-121
Куценко Дмитрий Сергеевич
Преподаватель Левченко А.Ю
Одесса 2013 (год)
Лабораторная работа №4 „Переопределение операций.
Исходные данные для лабораторной работы
Класс Строка должен включать данное типа строка символов - S и уметь обрабатывать параметр методов типа строка символов - S1. Для этого в нём должны быть реализованы следующие операции над строками.
Вариант Набор операций
10 28,8,20,44
8.Замена всех символов с нечетными номерами на некоторый символ.
20. Выполнение операции “равно” для двух строк.
28. Замена в строке всех строчных букв алфавита на прописные.
44. Замена в строке последних n символов на символ с наименьшим кодом из входящих в строку.
Выполнение лабораторной работы
Создать класс Строка, который должен содержать два или три конструктора, деструктор, метод распечатки данных.
Выполнить переопределение операций для операций над строками, указанными в таблице.
Создать объекты класса и продемонстрировать использование всех переопределенных операций.
Код программы:
/*Замена всех символов с нечетными номерами на некоторый символ.
Выполнение операции “равно” для двух строк.
Замена в строке всех строчных букв алфавита на прописные.
Замена в строке последних n символов на символ с наименьшим кодом из входящих в строку.*/
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
class Stroka
{
public:
char s[256];
public:
Stroka() //Конструктор
{
}
Stroka(char *str) //Конструктор
{
strcpy_s(s, str);
}
friend Stroka operator*(Stroka s1)
{
Stroka str;// форм новую строку
int i;
for (i = 0; i < strlen(s1.s); i ++)
{
str.s[i] = toupper(s1.s[i]);//присв. верх. рег.
}
str.s[strlen(s1.s)] = 0;
return str;
}
friend Stroka operator+(Stroka s1)
{
Stroka str;// форм новую строку
int i;
strcpy_s(str.s, s1.s);
for (i = 0; i < strlen(s1.s); i +=2)
{
str.s[i] = '@';//замена символа
}
str.s[strlen(s1.s)] = 0;
return str;
}
friend Stroka operator-(Stroka s2, int n)
{
Stroka str;
strcpy_s(str.s, s2.s);
char min = str.s[0];
for (int i = 1; i < strlen(str.s); i ++)
if (str.s[i] < min)
min = str.s[i];//
for (int i = strlen(str.s) - n; i < strlen(str.s); i ++)
str.s[i] = min;
return str;
}
friend bool operator==(Stroka s1, Stroka s2)
{
cout << s1.s << endl << s2.s << endl;
if (!strcmp(s1.s, s2.s))
return true;
return false;
}
~Stroka() {}
};
void main()
{
Stroka s1, s2;
char sa[256],sb[256]; int n;
setlocale( LC_ALL,"Russian" );
cout<<"Введите строку 1:"<< endl;
cin>>sa;
strcpy_s(s1.s, sa);
cout<<"Введите строку 2:"<< endl;
cin>>sb;
strcpy_s(s2.s, sb);
cout<<"Выполнение операции “равно” для двух строк."<< endl;
cout<<"Строки равны?"<< endl;
if (s1 == s2)
cout << "Ответ: ДА" << endl;
else
cout << "Ответ: НЕТ" << endl;
system("pause");
cout<<"Замена в строке всех строчных букв алфавита на прописные."<< endl;
s1 = *s1;
cout << s1.s<<endl;
system("pause");
cout<<"\nЗамена всех символов с нечетными номерами на некоторый символ"<< endl;
s1= +s1;
cout << s1.s<<endl;
system("pause");
cout<<"\nЗамена в строке последних n символов на символ с наименьшим кодом из входящих в строку."<< endl;
cout<<"Введите количество последних n символов:"<< endl;
cin>>n;
s2 = s2 - n;
cout << s2.s<<endl;
}