Автор вопроса
Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
К курсу →
Автор вопроса
Не самый конечно наилучший пример, но во всяком с задачей точно справится
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");
}
Глаза разуйте....у вас нет классов
Если мне книжку по русскому языку нужно взять, то вам помойму следует по синтаксису C++ литературы почитать....
И не забудьте уделить внимание на определения слова "класс"...
И не стоит доколебываться до моих кодов... Чего вы ко мне прицепились, я могу только догадываться (возможно см. прикрепл. файл).
Я никому не навязываю свой код, либо свое мнение, я не пытаюсь заработать на студентах, у них и так денег вечно не хватает, я просто отвечаю на фразы ("помогите пожалуйста" и т.д.)...
Я всегда пытаюсь организовать свой код таким образом, что бы автор мог разобратся в нем или хотя бы понять принцип и написать свой...
Я не ставлю при написании кода задачи жесткой оптимизации как длины кода, так и памяти при работе программы, у меня никогда нет финансовых отношений с автором и поэтому автор впринципи не может меня упрекнуть, принцип "не нравится - ни читайте"... Я всегда стараюсь описать (откомментировать) ход своей мысли в алгоритме, что бы человек смог понять и разобратся...
И у меня нет ни одного сообщения, которое бы было написанно "на ..бись"...
Так что товарищ, с запавлей буквой r при регистрации, лучше бы дельным чем-нибудь занялись....
Вложения
<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>
Добавлено: ЛУчше бы не спорили, а код задачи до идеального довели.
<FONT color='#ffffff' size='+3'> ! </font>
</td><td align="midle" valign='top' style='background:#fff;'>Аккуратнее или отправлю в 3хдненвый перекур обоих.</td>[/tr]</table>
Добавлено: ЛУчше бы не спорили, а код задачи до идеального довели.
rrrFer, ладно уж, я правда бываю не внимателен, не спорю....И важное иной раз тоже упускаю...
Ты меня извини за это "про изучения синтаксиса", я читал твои посты и прекрасно понимаю, что когда писал очень приувеличил, ну эт я психанул просто
Я же видел прекрасно что ты прямо доколебывался в мои кода
Если чесно, и про кирпич можно сказать что он круглый, если очень постараться..... 
Без обид, ты хороший кодер, я перегнул....
Постараюсь в предь более или менее придерживаться правил...
"Мир, дружба жвачка вообщем"....
Правда извини, я и после того как запостил прошую мессагу, хотел ее удалить, но уж сильно злой был....
Вообщем я правда переборщил...
Ты меня извини за это "про изучения синтаксиса", я читал твои посты и прекрасно понимаю, что когда писал очень приувеличил, ну эт я психанул просто
Я же видел прекрасно что ты прямо доколебывался в мои кода
Без обид, ты хороший кодер, я перегнул....
Постараюсь в предь более или менее придерживаться правил...
"Мир, дружба жвачка вообщем"....
Правда извини, я и после того как запостил прошую мессагу, хотел ее удалить, но уж сильно злой был....
Вообщем я правда переборщил...
люди!!! Срочно!!!! помогите, пожалуйста, написать программу на c++!!! Задача такая: Реализовать указанные классы с закрытыми полями, для каждого из которых кроме методов, указанных в задании, должны быть реализованы следующие методы:
-методы, которые возвращают значение полей
-метод инициализации
-ввод значения полей
-вывод на экран
-преобразование в строку
там, где необходимо организовать проверку корректности данных.
Реализовать класс Money для работы с денежными суммами. Объекты класс определяются парой чисел(рубли, копейки). Реализовать методы сложения, вычитания, деления сумм, сравнение двух сумм, умножение и деление на число.
ПОЖАЛУЙСТА!!! очень надо!
-методы, которые возвращают значение полей
-метод инициализации
-ввод значения полей
-вывод на экран
-преобразование в строку
там, где необходимо организовать проверку корректности данных.
Реализовать класс Money для работы с денежными суммами. Объекты класс определяются парой чисел(рубли, копейки). Реализовать методы сложения, вычитания, деления сумм, сравнение двух сумм, умножение и деление на число.
ПОЖАЛУЙСТА!!! очень надо!
Ещё по теме
4
Поделиться: