реализовать класс строка с динамическим кол-вом элементов
задание: реализовать класс строка с динамическим кол-вом эел-тов, требования:
1) возврат подстроки (вывести элементы из строки например с 3 по 5)
2) изменить размер строки путем добавления в конец пустых символов
3) вставить подстроку в строку после определенного символа (символ определяется номером)
Цитата:
#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) // вывод произвольной подстроки
{
[COLOR="red"] // ????????????[/COLOR]
}
void Rec (int i, char a) // Запись подствроки в строку
{
[COLOR="red"] // ????????????[/COLOR]
}
void Space (int n) // Добавление пустых символов
{
[COLOR="red"]// ????????????[/COLOR]
}
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;
}
#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) // вывод произвольной подстроки
{
[COLOR="red"] // ????????????[/COLOR]
}
void Rec (int i, char a) // Запись подствроки в строку
{
[COLOR="red"] // ????????????[/COLOR]
}
void Space (int n) // Добавление пустых символов
{
[COLOR="red"]// ????????????[/COLOR]
}
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;
}
пожалуйста великие гуру с++ помогите студенту ...
Для начала нужна реализация конструкторов. SubStr должен возвращать строку типа String, аналогично и Rec должен не символ получать, а ссылку на строку. Для реализации надо почитать о стандартных сишних функциях для строк. Например:
если кто то может написать эту программу за вознаграждение ... что бы она работала на borland 3.1 напишите мне icq-2267144
сделано ...