Реализация Класса Строка С++

  • Автор темы kidsporno
  • Дата начала
K

kidsporno

Гость
#1
Доброго времени суток всем просматривающим эту тему ...
всем знающим ооп на С++ предлагаю решить задачу ... естественно за вознаграждение обращаться ( icq-2267144) цена договорная

Собственно Задание: реализовать класс строка с динамическим кол-вом эел-тов, требования:
1) возврат подстроки (вывести элементы из строки например с 3 по 5)
2) изменить размер строки путем добавления в конец пустых символов
3) вставить подстроку в строку после определенного символа (символ определяется номером)
среда проверки Borland 3.1

пробовал делать сам ... скука жуткая в ооп совсем не понимаю ...
вот должно выглядеть примерно так:
C++:
#include <iostream.h>
#include <cstring.h>

class String
{
private:
char* S;
size_t len;
public:
String();
String(const char *s);
String(const String &s);
~String(){ delete [] S;}

istream& operator>>(istream&, String&); // Функция реализует ввод объектов класса с клавиатуры
ostream& operator<<(ostream&, const String&); // Функция реализует вывод объектов класса на экран
char& operator[] (int index) const
{
if (index < 0 || index >= len)
{
cout << "Выход за рамки." << endl;
exit(1);
}
return S[index];
}
size_t GetLen() // Функция возвращает длину строки
{
return len;
}
void SubStr (int x, int c) // вывод произвольной подстроки
{
// ????????????
}
void Rec (int i, char a) // Запись подствроки в строку
{
// ????????????
}
void Space (int n) // Добавление пустых символов
{
// ????????????
}
bool Empty ()
{
if (len != 0)
{
cout << "Строка не пустая" << endl;
return true;
}
else
{
cout << "Строка пустая" << endl;
return false;
}
}

};


istream& operator>>(istream& is, String& str)
{
const int N = 65536;
char temp[N] = {0};// Временный массив для многострочного ввода
size_t Length = 0, //длина последней введенной строки,
Total = 0; //общая длина ввода;
do // ввод продолжается до ввода пустой строки
{
is.getline(temp + Total, N - Total); // запрашиваем строку
Length = strlen(temp + Total);// замеряем длину введенной строки
if(Length == 0) // если строка пуста
{
break;
}
Total += Length + 1; // увеличиваем общую длину 1 - это \n
temp[Total - 1] = '\n';
} while (Total < N);
temp[Total - 1] = 0; // Убираем последний Enter
str = temp;// вызываем конструктор преобразования и перегруженный оператор присваивания
return is;
}


ostream& operator<<(ostream& os, const String& str)
{
os << str.S; // Вывод строки
return os; // Возврат объекта вывода
}


int main()
{
setlocale (LC_ALL, "Rus");
int UserChoise, n, z;
char x;
String a, b, c;
cout << "Введите строку: ";
cin >> a;
do
{
cout << endl;
cout << " Меню" << endl;
cout << "==========================================" << endl;
cout << " [1] Чтение подстроки" << endl;
cout << " [2] Добавление пустых символов" << endl;
cout << " [3] Вставка подстроки в строку" << endl;
cout << " [4] Выход" << endl;
cout << "==========================================" << endl;
cout << endl;
cout << "Ваш выбор : ";
cin >> UserChoise;
cout << endl;
switch (UserChoise)
{

case 1:
cout << "Введите индекс первого элемента: ";
cin >> z;
cout << "Введите кол-во символов: ";
cin >> n;
c.SubStr(z, n);
cout << endl;
break;
case 2:
cout << "Введите кол-во пустых символов: ";
cin >> n;
c.Space(n);
cout << endl;
break;

case 3:
cout << "Введите индекс элемента после которого осуществлять вставку: ";
cin >> z;
cout << "Введите подстроку: ";
cin >> b;
c.SubStr(z, n);
cout << endl;
break;

case 4:
cout << "ПОКА !!!!" << endl;
break;

default:
cout << endl << "Неправильный выбор! Попробуйте снова." << endl;
}

} while (UserChoise != 4);

return 0;
}