Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2007, 19:38   #1
1ntro
Пользователь
 
Регистрация: 10.12.2007
Сообщений: 28
По умолчанию Разработка собственного класса

1. Разработать класс для представления объекта строка.
2. Определить конструктор с одним параметром целого типа – длина строки, который можно использовать как конструктор умолчания.
3. Определить конструктор, который копирует в новую строку n первых символов другой строки и который можно использовать как конструктор копирования
4. деструктор.
5. Определить преобразования из вещественного числа в строку, представляющую это число, и из строки в вещественное число.

Ниж хелп, моя больше не может...
*dead*
пысы: язык С++

Последний раз редактировалось 1ntro; 10.12.2007 в 19:54.
1ntro вне форума Ответить с цитированием
Старый 11.12.2007, 23:09   #2
SaleX
 
Регистрация: 11.12.2007
Сообщений: 4
По умолчанию

#include <string.h>
#include <iostream.h>
#include <conio.h>

class string // Объявление строкового класса
{
private:
char* S; // Строка
int len; // Длина строки
public:
string(); // Конструктор по умолчанию
string(char* s); // Перегруженный конструктор
string(const string& s); // Конструктор копирования
~string() { delete [] S; } // Деструктор
void Sort(string s[], int n); // Функция сортировки
void Print() { cout << S << endl; } // Распечатка
void GetStr() { char a[256]; cin.getline(a, 256);
S = new char[strlen(a) + 1]; strcpy(S, a); }
// Запрос строки у пользователя
};

string::string()
{
S = new char[81]; // Выделение памяти под 81 элемент
// строки для объекта по умолчанию
for(int i = 0; i < 81; i++)
S[i] = 0;
len = 80;
}

string::string(char* s)
{
len = strlen(s);
S = new char[len + 1];
strcpy(S, s); // Инициализация строкой, переданной
// пользователем
}

string::string(const string& s)
{
len = s.len;
S = new char[len + 1]; // Безопасное копирование
strcpy(S, s.S);
}

void string::Sort(string s[], int n)
{ // Сортировка строк
bool flag = true;
string temp;
for(int j = 1; ; j++)
{
for(int i = 0; i < n - j; i++)
if(strcmp(s[i].S, s[i + 1].S) > 0)
{
temp.len = s[i].len; // Вычисление длины строки
delete [] temp.S; // Удаление строки
temp.S = new char[temp.len + 1];// Выделение памяти
strcpy(temp.S, s[i].S); // Копирование строки

s[i].len = s[i + 1].len;
delete [] s[i].S;
s[i].S = new char[s[i].len + 1];
strcpy(s[i].S, s[i + 1].S);

s[i + 1].len = temp.len;
delete [] s[i + 1].S;
s[i + 1].S = new char[s[i + 1].len + 1];
strcpy(s[i + 1].S, temp.S);

flag = false;
}
if(flag)
break;
flag = true;
}
}

void main()
{
int n;

cout << "Input the number of strings:\t";
cin >> n; // Вводим количество строк

if(n < 0) {
cout << "Error number:\t" << n << endl;
return;
}

char c[2]; // Забираем из потока символ Enter ("\n")
cin.getline(c, 2);

string *s = new string[n]; // Создаем массив из n строк

for(int i = 0; i < n; i++)
s[i].GetStr(); // Ввод строк

s->Sort(s, n); // Сортировка строк

for(i = 0; i < n; i++)
s[i].Print(); // Вывод отсортированных строк

cout << endl;

getch(); // Ожидание нажатия клавиши

delete [] s; // Удаление массива
}
SaleX вне форума Ответить с цитированием
Старый 11.12.2007, 23:27   #3
1ntro
Пользователь
 
Регистрация: 10.12.2007
Сообщений: 28
По умолчанию

ОГРОМНОЕ СПАСИБО!
1ntro вне форума Ответить с цитированием
Старый 16.12.2007, 14:54   #4
1ntro
Пользователь
 
Регистрация: 10.12.2007
Сообщений: 28
Печаль

Таа, в общем попробовал, но почему то при преобразовании в дабл вечно выходит ноль х-Х

Цитата:
#include <vcl.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop
#pragma argsused
#pragma warning (disable : 4996)
class blabla
{
private:
size_t maxlen;
size_t len;
char* S;
public:
blabla(size_t len = 0);
friend ostream& operator<<(ostream&, const blabla&);
friend istream& operator>>(istream&, blabla&);
blabla(const char* s);
blabla(const blabla &s, size_t symbols = -1);
~blabla() { delete [] S; }
size_t GetLen() const { return len; }
size_t GetMaxLen() const { return maxlen; }
operator double ();
blabla (double d);

};
istream& operator>>(istream& is, blabla& 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;
temp[Total - 1] = '\n';
} while(Total < N);
temp[Total - 1] = 0;
str = temp;
return is;
}
ostream& operator<<(ostream& os, const blabla& str)
{
os << str.S;
return os;
}
blabla::blabla(size_t l)
:maxlen (l), len (0), S(new char [maxlen+1])
{
S[0] = 0;
}
blabla::blabla(const char* s)
:maxlen (strlen(s)), len(maxlen), S (new char[len+1])
{
strcpy (S, s);
}
blabla::blabla(const blabla &s, size_t symbols)
{
size_t slen = s.GetLen();
len = maxlen = ((symbols == -1) ? slen : ((symbols > slen) ?slen : symbols));
S = new char [len+1];
strncpy (S, s.S, len);
S[len] = 0;
}
blabla:: operator double ()
{
return atof (S);
}
blabla::blabla (double d)
{
len = strlen(S);
}
int main(int argc, char* argv[])
{
blabla a;
cout << "Input string:\n";
cin >> a;
cout<<double(a);
return 0;
}
Кто-нить может помочь?
1ntro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить дату собственного файла ERASERROR Общие вопросы Delphi 1 24.02.2008 14:11
Установка собственного курсора Amateur Общие вопросы Delphi 4 13.11.2007 05:42
Создание собственного компонента Леха207 Помощь студентам 1 03.07.2007 12:45
Создания Класса Mickle Общие вопросы Delphi 1 30.04.2007 00:44
Советы по созданию собственного сайта с нуля, хостинг, дизайн, языки программирования Hallo Обсуждение статей 0 12.12.2006 21:40