Шаблон иерархической структуры данных в памяти (односвязный список, содержащий статический массив указателей на объекты), страница 9

                  l.Add(inputstr);

            } break;

            case 2: {

                  CMyString inputstr;

                  int number;

                  cout << "Input string: "; cin >> inputstr;

                  cout << "Input logical number: "; cin >> number;

                  l.Insert(inputstr,number);

            } break;

            case 3: {

                  int number;

                  cout << "Input logical number: "; cin >> number;

                  CMyString   *p=l.Delete(number);

                  delete p;

            } break;

            case 4: {

                  l.Sort();

                  t2=(double)clock();

                  k=(t2-t1)/CLK_TCK;

                  cout << "Vremya sortirovki: " << k << "\n";

            } break;

            case 5: {

                  CMyString inputstr;

                  cout << "Input string"; cin >> inputstr;

                  l.InsertKeepOrder("zzz");

            } break;

            case 6: {

                  l.SaveFile("out.txt");

            } break;

            case 7: {

                  l.LoadFile("out.txt");

            } break;

            case 8: {

                  l.Balancing();

            } break;

            case 9: {

                  l.Show();

                  getch();

            } break;

      }

  }

}

“MYSTRING.CPP”

#include "mystring.h"

#include <string.h>

/******* реализация класса строки *******/

/* конструктор */

CMyString::CMyString(char *str) {  /* str - входная строка */

      l=strlen(str);

      s=new char[l+1];

      strcpy(s,str);

}

/* конструктор копирования */

CMyString::CMyString(CMyString &str) {

      l=str.l;

      s=new char[l+1];

      strcpy(s,str.s);

}

/* деструктор */

CMyString::~CMyString() {

      delete[] s;

}

/* оператор присваивания */

CMyString &CMyString::operator=(CMyString &str) {

      if (s!=NULL) delete[] s;           /* осбождение памяти занимаемой старой строкой */

      l=str.l;                                

      s=new char[l+1];

      strcpy(s,str.s);                   /* копирование новой строки */

      return *this;

}

/* оператор сравнения "больше" */

int CMyString::operator>(CMyString &str) {

      return strcmp(s,str.s)>0;

}

/* оператор сравнения "меньше" */

int CMyString::operator<(CMyString &str) {

      return strcmp(s,str.s)<0;

}

/* оператор ввода из потока */

istream &operator>>(istream &in, CMyString &str) {

      char  tmps[1000];                   /* 1000 - максимальное значение входной строки */

      in >> tmps;

      str.l=strlen(tmps);                     

      str.s=new char[str.l+1];

      strcpy(str.s,tmps);

      return in;                               /* возвращение измененного потока */

}

/* оператор вывода в поток */

ostream &operator<<(ostream &out, CMyString &two) {

      out << two.s;

      return out;

}

“MYSTRING.H”

#include <iostream.h>

#include <string.h>

/* класс строки */

class CMyString {

      int         l;                /* длинна строки */

      char  *s;                     /* строка */

public:

      CMyString() { l=0; s=NULL; };      /* конструктор по умолчанию */

      CMyString(char *str);             

      CMyString(CMyString & str);              /* конструктор копирования */

      ~CMyString();                     

      CMyString &operator=(CMyString &str);    /* оператор присваивания */

      int operator>(CMyString &str);                 /* операторы сравнения */

      int operator<(CMyString &str);

      /* операторы ввода-вывода (работа с потоками) */

      friend istream &operator>>(istream &in, CMyString &str);

      friend ostream &operator<<(ostream &out, CMyString &two);

};