Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание С++ 07_10_08_.doc
Скачиваний:
22
Добавлен:
11.03.2016
Размер:
1.15 Mб
Скачать

3. Дополнить класс MyString (строка)

Вариант 1. (оптимальное использование памяти)

Память под строку выделяется ровно столько, сколько необходимо для хранения символов. Любая операция, приводящая к увеличению или уменьшению числа символов, сопровождается выделением нового участка памяти и освобождением старого

В классе должны быть определены функции

class MyString

{char* s;

int len;

public:

//…

int find(MyString * item);

MyString* substring(int pos,int count);

MyString* erase(int pos,int count);

MyString* insert(int pos, MyString * item);

MyString* remove(MyString * item);

MyString* replace(MyString *Old, MyString *New);

MyString**split(int&count) Разбивает строку на массив слов

MyString**split(MyString*splits,int&count); Разбивает строку на массив подстрок, используя строку символов - разделителей

static MyString * concate(MyString* s1, MyString* s2); Соединяет(сцепляет) две строки

static MyString * concate(MyString* mas[], int count); Соединяет(сцепляет) массив строк

static MyString * join(MyString* mas[], int count, char split); Соединяет(сцепляет) массив строк, вставляя между ними символ разделитель

};

Вариант 2. ( оптимальная эффективность операций)

Память под строку выделяется больше необходимого размера. Выделением нового участка памяти при реализации операций над строками производится только в случае ее исчерпания. Для этого используется функция voidresize(intnewsize);

В классе должны быть определены функции

#define MAX_SIZE 256

class MyString

{char* s;

char* cur;

int size;

public:

//…

MyString()

{cur=s=new char [size =MAX_SIZE];

*s=’\0’;

}

void resize(int newsize);

MyString & mystring::operator= (const MyString & a){

if(this!=&a) {

if(size< a.length())

{delete[] s;

s=new char[a. size];

}

strcpy(s,a.s);

size =a. size;

cur=s+ a.length();

}

return *this;}

int find(int first,int last,const MyString & item);

MyString substring(int pos,int count);

int erase(int pos,int count);

int insert(int pos, const MyString & item);

int remove(int first,int last,const MyString & item);

int replace(int first,int last,const MyString &Old,const MyString &New);

MyString*split(int&count) Разбивает строку на массив слов

MyString*split(constMyString&splits,int&count); Разбивает строку на массив подстрок, используя строку символов - разделителей

static MyString concate(const MyString& s1, const MyString& s2);

Соединяет(сцепляет) две строки

static MyString concate(MyString mas[], int count); Соединяет(сцепляет) массив строк

static MyString join(MyString mas[],int count ,char split); Соединяет(сцепляет) массив строк, вставляя между ними символ разделитель

};

4. Разработать класс Title (название)

Данные хранятся в виде одной строки (класс MyString) . Варианты задания отличаются различными условиями при проверке корректности данных:

  1. Все буквы и пробелы

  2. Все буквы и пробелы +первая буква заглавная

  3. Все буквы и пробелы +первая буква заглавная + в каждом слове присутствует хотя бы одна гласная

5 . Разработать класс Name (имя)

Класс должен содержать функции сравнения по фамилии, по имени, по отчеству

Данные хранятся в виде:

  1. Одной строки (класс MyString)

  2. Трех строк (класс MyString) , в каждой из которых содержится фамилия имя отчество соответственно

  3. Одной строки (класс MyString) с фамилией и двух переменных символьного типа с инициалами