Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- //кінець рядка
- #define END_LINE '\0'
- using namespace std;
- class MyString {
- private:
- //покажчик на початок рядка
- char* s;
- public:
- //конструктор за замовчуванням
- MyString() {
- s = new char[1];
- s[0] = END_LINE;
- }
- //конструктор, що приймає у якості параметру значення n
- MyString(int n) {
- s = new char[n + 1];
- s[n] = END_LINE;
- }
- //конструктор, що приймає у якості параметру рядок
- MyString(char* s) {
- int len = 0;
- while (s[len] != END_LINE)
- len++;
- this->s = new char[len + 1];
- for (int i = 0; i < len; i++)
- this->s[i] = s[i];
- this->s[len] = END_LINE;
- }
- //деструктор
- ~MyString() {
- delete[] s;
- }
- //метод, що визначає довжину рядка
- int getLength() {
- int len = 0;
- while (s[len] != END_LINE)
- len++;
- return len;
- }
- //метод, що визначає чи рядок пустий
- bool isEmpty() {
- return s[0] == END_LINE;
- }
- //оператор + або конкатенація рядків
- MyString operator + (MyString &x) {
- int a_len = getLength();
- int b_len = x.getLength();
- int res_len = a_len + b_len;
- MyString res_string(res_len + 1);
- for (int i = 0; i < res_len; i++) {
- if (i < a_len)
- res_string.s[i] = s[i];
- else
- res_string.s[i] = x.s[i - a_len];
- }
- res_string.s[res_len] = END_LINE;
- return res_string;
- }
- //оператор = або присвоєння
- MyString& operator = (MyString x) {
- int len = 0;
- while (x.s[len] != END_LINE)
- len++;
- s = new char[len + 1];
- for (int i = 0; i < len; i++)
- s[i] = x.s[i];
- s[len] = END_LINE;
- return *this;
- }
- //дружній оператор введення рядка
- friend istream& operator >> (istream& is, MyString& x);
- //дружній оператор виведення рядка
- friend ostream& operator << (ostream& os, MyString& x);
- };
- //оператор введення рядка
- istream& operator >> (istream& is, MyString& x) {
- is >> x.s;
- return is;
- }
- //оператор виведення рядка
- ostream& operator << (ostream& os, MyString& x) {
- os << x.s;
- return os;
- }
- int main() {
- MyString a, b, c;
- //перевірка оператора введення
- cout << "Enter a: ";
- cin >> a;
- cout << "Enter b: ";
- cin >> b;
- //перевірка оператора +
- cout << endl << "a + b = ";
- c = a + b;
- //перевірка оператора виведення
- cout << c << endl;
- //перевірка методу, що визначає довжину рядка
- cout << endl << "length of a = " << a.getLength() << endl;
- cout << "length of b = " << b.getLength() << endl;
- cout << "length of a + b = " << c.getLength() << endl;
- //перевірка оператора =
- cout << endl << "Operator = test:" << endl;
- a = "Hello world!";
- cout << a << endl;
- //перевірка конструктора який приймає рядок
- cout << endl << "Constructor (*char) test:" << endl;
- MyString d("Hello world!");
- cout << d << endl;
- cout << endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment