Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <cstdio>
- #include <iostream>
- #include <cstring>
- #include <ctime>
- using namespace std;
- class MyString
- {
- private:
- char *str;
- int length;
- char *GenString(int len) //генерация случайных строк
- {
- str = new char[len + 1];
- for (int i = 0; i < len; i++)
- str[i] = 'a' + rand() % 26;
- str[len] = '\0';
- return str;
- }
- public:
- MyString() //конструктор без параметров
- {
- length = 1 + rand() % 19;
- GenString(length);
- }
- MyString(char *s) //конструктор с параметром ANSI-строка
- {
- length = strlen(s);
- str = new char[length + 1];
- strcpy(str, s);
- }
- MyString(int len) //конструктор с параметром длина строки
- {
- length = len;
- if (length <= 20)
- GenString(length);
- else
- cout << "The number of symbols more than 20" << endl;
- }
- MyString(MyString &obj) // конструктор копий. В параметре объект класса MyString
- {
- length = obj.length;
- str = new char[obj.length + 1];
- strcpy(str, obj.str);
- }
- ~MyString() //деструктор
- {
- if (str)
- delete[] str;
- }
- MyString& operator =(char *s) //оператор присваивания ANSI-строки
- {
- if (str)
- delete[] str;
- length = strlen(s);
- str = new char[length + 1];
- strcpy(str, s);
- return *this; //this это указатель на адрес объекта класса
- }
- MyString& operator =(MyString &obj) //оператор присваивания объекта MyString
- {
- if (str)
- delete[] str;
- length = strlen(obj.str);
- str = new char[length + 1];
- strcpy(str, obj.str);
- return *this;
- }
- int GetLength() //getter для длины строки
- {
- return length;
- }
- bool operator >(MyString &obj) //оператор >
- {
- if (strcmp(str, obj.str) > 0)
- return true;
- return false;
- }
- bool operator <(MyString &obj) //оператор <
- {
- if (strcmp(str, obj.str) < 0)
- return true;
- return false;
- }
- friend ostream& operator <<(ostream& ost, MyString &s); //friend-оператор вывода в поток
- };
- ostream& operator <<(ostream& ost, MyString &s)
- {
- ost << s.str;
- return ost;
- }
- class MyStringArray
- {
- private:
- MyString *strArr;
- int Length;
- public:
- MyStringArray(int len) //конструктор с параметром длина строки
- {
- Length = len;
- strArr = new MyString[Length];
- }
- ~MyStringArray() //деструктор
- {
- if (strArr)
- delete[] strArr;
- }
- MyString& operator [](int i) //оператор индексации []
- {
- return strArr[i];
- }
- void SortContent() //сортировка пузырьком по содержимому строк
- {
- MyString tmp;
- for (int i = 0; i < Length - 1; i++)
- {
- for (int j = 0; j < Length - i - 1; j++)
- {
- if (strArr[j] > strArr[j + 1])
- {
- tmp = strArr[j];
- strArr[j] = strArr[j + 1];
- strArr[j + 1] = tmp;
- }
- }
- }
- }
- void SortLength() //сортировка пузырьком по длине строк
- {
- MyString tmp;
- for (int i = 0; i < Length - 1; i++)
- {
- for (int j = 0; j < Length - i - 1; j++)
- {
- if (strArr[j].GetLength() > strArr[j + 1].GetLength())
- {
- tmp = strArr[j];
- strArr[j] = strArr[j + 1];
- strArr[j + 1] = tmp;
- }
- }
- }
- }
- void CheckSortContent() // проверка упорядоченности массива по содержимому строк
- {
- cout << endl << "Check Sort Content: ";
- int error = 0;
- for (int i = 0; i < Length - 1; i++)
- if (strArr[i] > strArr[i + 1]) error++;
- if (error == 0) cout << "The sorting is correct!" << endl;
- else cout << "The sorting is NOT correct." << endl;
- }
- void CheckSortLength() //проверка упорядоченности массива по длине
- {
- cout << endl << "Check Sort Length: ";
- int error = 0;
- for (int i = 0; i < Length - 1; i++)
- if (strArr[i].GetLength() > strArr[i + 1].GetLength()) error++;
- if (error == 0) cout << "The sorting is correct!" << endl;
- else cout << "The sorting is NOT correct." << endl;
- }
- friend ostream& operator << (ostream& ost, MyStringArray &arr);
- };
- ostream& operator << (ostream& ost, MyStringArray &arr)
- {
- if (arr.Length <= 50)
- {
- for (int i = 0; i < arr.Length; i++)
- {
- ost << arr.strArr[i] << endl;
- }
- return ost;
- }
- else
- cout << endl << "The number of strings more than 50" << endl;
- }
- int main()
- {
- srand(time(NULL));
- MyStringArray arr(15);
- arr.SortContent();
- arr.CheckSortContent();
- cout << arr << endl;
- arr.SortLength();
- arr.CheckSortLength();
- cout << arr << endl;
- system("Pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement