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

Тема в разделе "C/C++/C#", создана пользователем Luxian, 19 сен 2009.

Статус темы:
Закрыта.
  1. Luxian

    Luxian Гость

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

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (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;
    }
     
  3. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    А у него в задание про него не было ничего ;-)) Это у него в теме что то такое есть ;-)))
    в любом случае *исправил* :)))
     
Загрузка...
Похожие Темы - Задача отсортировать текст
  1. Янчик
    Ответов:
    0
    Просмотров:
    486
  2. TrishaRay
    Ответов:
    1
    Просмотров:
    782
  3. elzim
    Ответов:
    0
    Просмотров:
    930
  4. ShaoKahn
    Ответов:
    1
    Просмотров:
    1.124
  5. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.107
Статус темы:
Закрыта.

Поделиться этой страницей