Задача: отсортировать текст. С++. ООП.

  • Автор темы Luxian
  • Дата начала
Статус
Закрыто для дальнейших ответов.
L

Luxian

#1
Помогите написать програму с заданием : Объявите класс с именем text. Объявите функцию show(), функция сортирования текста по возрастанию. текст можно вставить любой, а сортировать по количеству букв в слове от меньшего к большему ну или на оборот. главное чобы программа работала. Заранее Спасибо. Если вас не затруднит напишите пожалуйста программу полность а не только её рабочий код.
 

DarkKnight

Well-known member
01.08.2010
653
0
#2
C++:
/*
Объявите класс с именем text. Объявите функцию show(), функция сортирования текста по возрастанию.
Текст можно вставить любой, а сортировать по количеству букв в слове от меньшего к большему ну или на оборот.
/*
/*
codeby.net
Autor: DarkKnight125
*/

#include <iostream>
#include <ctype.h>


class Text
{
private:
char* str;
int st3;
int size;
public: 
//Функция возврата массива символов 
const char* Show(void);

//Функция сортировки слов (по возрастанию)
void SortWord(void);

//Опаратор присваивание Text = char*;
Text& operator= (char*);

//Перегрузка конструктора копирование по умолчанию
Text& operator= (Text&);
//Конструктор по умолчанию + инициализация переменной
Text(char* = "");	
//Деструктор класса
~Text();
};

//Перегрузка конструктора копирование по умолчанию
Text& Text::operator= (Text& Value)
{
delete[] str;
size = strlen(Value.str);
str = new char[size+1];
strcpy(str,Value.str);
return *this;
}

//Конструктор по умолчанию + инициализация переменной
Text::Text(char *Value = "") 
{
size = strlen(Value); // Запишим размер строки 
str = new char[size+1]; //Выделим память под размер строки + нулевой символ 
memset(str,0,size+1); //Обнулим выделеную память
if (strlen(Value)>0)
{
strcpy(str,Value); //Скопируем Value - в память
}
};

//Функция возврата массива символов 
const char* Text::Show(void)
{
return str;
}

//Функция сортировки слов (по возрастанию)
void Text::SortWord(void)
{		
int Word = 0; //Счетчик слов
char** ArrWord = new char*[size+1]; //Массив слов
char *buffer = new char[size+1]; //Буферная переменная
char *ptr = buffer; //Указатель на буферную переменную
memset(buffer,0,size+1); //Обнулим буфрную переменную

for (int i=0; i <= strlen(str); i++) //Обойдем по-символьно всю строку
{
if (!(isspace((unsigned char)str[i]) || ::iscntrl((unsigned char)str[i]))) //Если символ не управляющий или не разделитель
{
*ptr++ = str[i]; //Пишим в буферную переменную и сдвигаем указатель
}
else if (strlen(buffer)>0) //Если же управляющий или разделитель и длина буферной переменной >0
{
ArrWord[Word] = new char[size+1]; //Выделим память под слово
strcpy(ArrWord[Word++],buffer); //Скопируем буферную переменную в слово
memset(buffer,0,size+1); //Обнулим память буферной переменной
ptr = buffer; //Поставим указатель на начало буферной переменной
}
}
memset(str,0,size+1); //Обнулим строку
//Сортируем слова по длине
for (int i = 0; i<Word; i++)//Обойдем весь массив слов
{
int Max = size+1; //Текущая длина слова
int pos = -1; //Текущая позиция в массиве
for (int j=i; j<Word; j++) //Обойдем все слова с i 
{
if (Max > strlen(ArrWord[j])) 
{
Max = strlen(ArrWord[j]);
pos = j;
}
}
strcpy(buffer,ArrWord[i]); 
strcpy(ArrWord[i],ArrWord[pos]);
strcpy(ArrWord[pos],buffer);
strcat(str,ArrWord[i]);
if ( (i+1) != Word) strcat(str," ");
}
for (int i = 0; i<Word; i++)
{
delete[] ArrWord[i];
}
delete [] buffer;
delete [] ArrWord;
}

//Деструктор класса
Text::~Text()
{
delete[] str;
}
//Опаратор присваивание Text = char*;
Text& Text::operator= (char* Value)
{
delete[] str;
size = strlen(Value);
str = new char[size+1];
memset(str,0,size+1);
strcpy(str,Value); 
return *this;
}

using namespace std;

void main(void)
{
setlocale(LC_ALL,"Russian");

//Тестирование класса Text
Text K("Обычный текс для проверки программы");
K.SortWord();
cout<<K.Show()<<endl;;	
K = "Компания IBM";
K.SortWord();
Text D("FF");
D = K;
K = "Row Set";
cout<<"{"<<D.Show()<<"}"<<endl;
}
 

DarkKnight

Well-known member
01.08.2010
653
0
#3
А у него в задание про него не было ничего ;-)) Это у него в теме что то такое есть ;-)))
в любом случае *исправил* :)))
 
Статус
Закрыто для дальнейших ответов.