Задача на классы C++

Тема в разделе "C/C++/C#", создана пользователем Famous, 26 окт 2010.

  1. Famous

    Famous Гость

    Помогите пожалуйста написать код...хотя бы само начало...трудно начать с чего-то

    Написать программу, которая сканирует текст на русском языке и формирует массив указателей на список слов, каждый узел в которой по условию длин не более 4.
    Мама пьёт молоко, а папа кефир

    ________.JPG
     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Не самый конечно наилучший пример, но во всяком с задачей точно справится

    Код (C++):
    #include <iostream>
    #include <ctype.h>
    using namespace std;

    //Класс список слов
    struct Words
    {
    char* Word; //Строка (макс. 5 символов)
    Words* NextWord; //Указатель на класс

    public:
    void Add(char *str) //Функция добавления слова
    {
    int len = strlen(str); //Определим размерность строки
    Words *This = this; //Создадим указатель на текущий объект класса
    while (len>0) //Пока размер строки > 0
    {
    This->Word = new char[5]; //Создадим объект типа char размерностью 5 байт (4 символа + 1 завершающий строки)
    This->NextWord = NULL; //Указатель на клас поставим в null
    if (len > 4) //Если размер слова(строки) >4
    {
    This->NextWord = new Words; //Выделим память под след. элемент
    strncpy(This->Word,str,4); //Скопируем 4 символа в СписокСлов-Строка
    This->Word[4] = 0; //Завершающий символ строки
    str+=4; //Сместим указатель входящей строки на 4 байта (отбросим 4 символа в начале строки)
    len -= 4; //Уменьшим длину на 4 ед.

    }
    else //Если размер строки слова <= 4
    {
    strncpy(This->Word,str,strlen(str));//Скопируем [длину строки] символа в СписокСлов-Строка
    This->Word[strlen(str)] = 0; //Поставим завершающий символ строки
    len -= strlen(str); //Уменьшим размер *ну можно еще и сдвинуть но так как циклим мы len а не strlen(str) этого не понадобится
    }

    This = This->NextWord;      //Сместим указатель на сл. элемент списка
    }
    }

    void Print(void) //Функция вывода на экран по цепочки
    {
    Words *Temp = this;
    while (Temp) //Пока Temp не NULL
    {
    cout<<Temp->Word<<" -> ";
    Temp = Temp->NextWord; // Temp = след. элемент списка
    }
    cout<<"!!!";
    }

    };

    int AddString (Words *Arr, char *str) //Функция добавления строки (со словами) в массив Arr - массив объектов (списка), str - строка.. На выходе кол-во заполненых
    //Элементов массива
    {
    char *buffer = new char [1024]; //Буферная переменная
    int cnt = 0; //Кол-во символов промежуточное
    int ArrCount = 0; //Кол-во эл. массива (которые заполнили)
    while (strlen(str) != 0) //Пока не достигнут конец строки (Обойдем всю строку другими словами)
    {
    if (isalnum((unsigned char)str[0])) //Если символ в строке цифра или буква то значит мы в слове
    {
    buffer[cnt] = str[0]; //Запишим в буфер этот символ
    cnt++; //Увеличим счетчик
    }
    else if (cnt != 0) //Иначе - тоесть разделитель между строк и подтра*цензура*ся на случей идущих подряд разделителей
    {
    buffer[cnt] = 0; //Поставим в буфере символ конца строки
    Arr->Add(buffer); //Вызовим функцию класса на добавление слова в список
    cnt = 0; //Обнулим промежуточное кол-во символов, т.к. уже будем искать новое слово
    Arr++; //Сдвиним указатель на массив объектов на 1 элемент
    ArrCount++; //Увеличим кол-во заполненых эл. массива
    delete[] buffer; //Отчистим буферную переменную
    buffer = new char[1024]; //И заново выделим ей память
    }
    str++; //сдвиним указатель на строку, тем самым отбросив 1 символ из начала
    }

    if (cnt != 0) //Если на выходе из цикла пром. кол-во не нулевое, значит в буфере находится последнее слово
    {
    buffer[cnt] = 0; //Завершающий символ
    Arr->Add(buffer); //Запишим это слово в наш список
    ArrCount++; //Увеличим кол-во заполненых эл-ов
    }
    delete[] buffer; //почистим буферную переменную
    return ArrCount; //Вернем кол-во заполненых элементов
    }


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

    Words s[20]; //За размерностью следить в этом месте нужно... ЧТо бы за пределы не выйти
    char st[1024];
    gets(st); //Получим строку

    setlocale(LC_ALL,".866");
    int CountEl = AddString(s,st);



    for (int i=0; i< CountEl; i++) //Обойдем все элементы и выведим на экран
    {
    s[i].Print();
    cout<<endl;
    }



    system("pause");


    }
     
  3. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Глаза разуйте....
    Если мне книжку по русскому языку нужно взять, то вам помойму следует по синтаксису C++ литературы почитать....
    И не забудьте уделить внимание на определения слова "класс"...

    И не стоит доколебываться до моих кодов... Чего вы ко мне прицепились, я могу только догадываться (возможно см. прикрепл. файл).

    Я никому не навязываю свой код, либо свое мнение, я не пытаюсь заработать на студентах, у них и так денег вечно не хватает, я просто отвечаю на фразы ("помогите пожалуйста" и т.д.)...

    Я всегда пытаюсь организовать свой код таким образом, что бы автор мог разобратся в нем или хотя бы понять принцип и написать свой...
    Я не ставлю при написании кода задачи жесткой оптимизации как длины кода, так и памяти при работе программы, у меня никогда нет финансовых отношений с автором и поэтому автор впринципи не может меня упрекнуть, принцип "не нравится - ни читайте"... Я всегда стараюсь описать (откомментировать) ход своей мысли в алгоритме, что бы человек смог понять и разобратся...

    И у меня нет ни одного сообщения, которое бы было написанно "на ..бись"...
    Так что товарищ, с запавлей буквой r при регистрации, лучше бы дельным чем-нибудь занялись....
     

    Вложения:

    • __________.png
      __________.png
      Размер файла:
      30,2 КБ
      Просмотров:
      70
  4. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    <table valign="top" style='margin:0;width:100%;border:1px dashed red;'>[tr]<td align='middle' bgcolor='#ff6060' valign='top' width='1%'>
    <FONT color='#ffffff' size='+3'> ! </font>
    </td><td align="midle" valign='top' style='background:#fff;'>Аккуратнее или отправлю в 3хдненвый перекур обоих.</td>[/tr]</table>

    Добавлено: ЛУчше бы не спорили, а код задачи до идеального довели.
     
  5. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    rrrFer, ладно уж, я правда бываю не внимателен, не спорю....И важное иной раз тоже упускаю...
    Ты меня извини за это "про изучения синтаксиса", я читал твои посты и прекрасно понимаю, что когда писал очень приувеличил, ну эт я психанул просто :)
    Я же видел прекрасно что ты прямо доколебывался в мои кода :) Если чесно, и про кирпич можно сказать что он круглый, если очень постараться..... :)
    Без обид, ты хороший кодер, я перегнул....:)
    Постараюсь в предь более или менее придерживаться правил...
    "Мир, дружба жвачка вообщем"....
    Правда извини, я и после того как запостил прошую мессагу, хотел ее удалить, но уж сильно злой был....
    Вообщем я правда переборщил...
     
  6. Гость

    люди!!! Срочно!!!! помогите, пожалуйста, написать программу на c++!!! Задача такая: Реализовать указанные классы с закрытыми полями, для каждого из которых кроме методов, указанных в задании, должны быть реализованы следующие методы:
    -методы, которые возвращают значение полей
    -метод инициализации
    -ввод значения полей
    -вывод на экран
    -преобразование в строку
    там, где необходимо организовать проверку корректности данных.

    Реализовать класс Money для работы с денежными суммами. Объекты класс определяются парой чисел(рубли, копейки). Реализовать методы сложения, вычитания, деления сумм, сравнение двух сумм, умножение и деление на число.

    ПОЖАЛУЙСТА!!! очень надо!
     
  7. ierofant

    ierofant Гость

    Василиска
    Для своей задачи ты должна открыть свою тему, а не в чужой писать её.
     
Загрузка...
Похожие Темы - Задача на классы
  1. elzim
    Ответов:
    0
    Просмотров:
    932
  2. ShaoKahn
    Ответов:
    0
    Просмотров:
    1.128
  3. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.107
  4. MonteCristo
    Ответов:
    1
    Просмотров:
    852
  5. bort
    Ответов:
    1
    Просмотров:
    1.181

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