Главная » Статьи » Програмування » C++ [ Добавить статью ]

RUS Уроки по программированию на языке С++ (Пример на создание класса - СТРОКА.)

Пример на создание класса - СТРОКА.

А, сейчас, с целью закрепления пройденного материала, рассмотрим следующую задачу:

Cоздать класс, который осуществляет работу со строками: инициализация, реализация функций ввода-вывода и сортировка.

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

using namespace std;

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); 

 // Константный метод
 // возвращающий содержимое
 // строки
 const char*GetStr()const 
 { 
 return S; 
 }
 // метод позволяющий изменить содержимое
 // с помощью пользователя
 void SetStr() 
 {
 // если строка не пустая - очистить
 if(S!=NULL)
 delete[]S;
 
 // создаем массив
 // и запрашиваем у пользователя данные
 char a[256]; 
 cin.getline(a,256); 

 // просчитываем размер
 len=strlen(a)+1;

 // выделяем память
 S = new char[len];

 // переписываем в объект
 // введенную строку
 strcpy(S,a); 
 }

 // метод позволяющий изменить содержимое
 // с помощью параметра 
 void SetStr2(char*str) 
 {
 // если строка не пустая - очистить
 if(S!=NULL)
 delete[]S;

 // просчитываем размер
 len=strlen(str)+1;

 // выделяем память
 S = new char[len]; 

 // переписываем в объект
 // строку из параметра
 strcpy(S, str); 
 }
};

string_::string_()
{
 // Начальная инициализация
 S = NULL; 
 len = 0;
}

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)
{ 
 // Сортировка строк
 // Методом пузырька
 
 string_ temp; 

 for(int i=0;i<n-1;i++) 
 {
 for(int j=n-1;j>i;j--)
 {
 // сравнение двух строк
 if(strcmp(s[j].S,s[j-1].S)<0)
 {
 // запись стороки s[j] в temp
 temp.SetStr2(s[j].S);

 // запись стороки s[j-1] в s[j]
 s[j].SetStr2(s[j-1].S);

 // запись стороки temp в s[j-1]
 s[j-1].SetStr2(temp.S); 
 }
 }
 }
}

void main()
{
 int n,i;

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

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

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

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

 // Ввод строк c клавиатуры
 for(i = 0; i < n; i++)
 s[i].SetStr(); 

 // Сортировка строк
 // Вызов через указатель,
 // так как функция работает
 // для группы объектов,
 // а не для одного конкретного
 s->Sort(s, n); 

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

 // Удаление массива строк
 delete [] s; 
}
Категория: C++ | Добавил: DEN-SHP (06.11.2012)
Просмотров: 2052 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]