Страница 1 из 2
Задачка на C++, ПОМОГИТЕ ПОЖАЛУЙСТА НЕДОПРОГРАММИСТУ
Добавлено: 26 ноя 2013, 19:58
Мария1501
9. Создать класс для работы сo строками. Разработать элементы класса:
a. Поля:
• * указатель на char - хранит адрес динамически выделенной памяти;
• int n.
b. Конструктор, позволяющий создать строку из n символов.
c. Методы, позволяющие:
• подсчитать количество знаков препинания в строке;
• заменить в строке все строчные символы на прописные;
• прочитать символ из заданной позиции.
d. Свойства:
• возвращающее общее количество элементов в строке (доступное только для чтения);
• позволяющее установить значение поля, в соответствии с введенным значением строки с клавиатуры, а также получить значение данного поля (доступно для чтения и записи).
Код: Выделить всё
class String
{
public:
String(char* string = "")
{
n = strlen(string) + 1;
str = new char[n];
memcpy(str, string, n);
}
String(char* string, size_t size) // конструктор, позволяющий создать строку из size символов
{
n = size + 1;
str = new char[n];
memcpy(str, string, n * sizeof(char));
str[size] = 0;
}
~String()
{
if (str)
delete str;
}
void print()
{
std::cout << str << std::endl;
}
int const getnum() // кол-во символов в строке
{
return n - 1;
}
char const getchar(int n) // символ из позиции n
{
return str[n - 1];
}
void upper() // в верхний регистр
{
for (int i = 0; i < n; i++)
str[i] = toupper(str[i]);
}
int const punctuation() // кол-во знаков препинания
{
int count = 0;
for (int i = 0; i < n + 1; i++)
if (ispunct(str[i]))
count++;
return count;
}
private:
char* str;
int n;
};
int _tmain(int argc, _TCHAR* argv[])
{
String str("linkin park");
str.upper();
str.print();
std::cout << str.getnum() << std::endl;
std::cout << str.punctuation() << std::endl;
std::cout << str.getchar(1) << std::endl;
system("PAUSE");
return 0;
}
Re: Задачка на C++, ПОМОГИТЕ ПОЖАЛУЙСТА НЕДОПРОГРАММИСТУ
Добавлено: 27 ноя 2013, 14:42
Romeo
Задание есть, код тоже есть. Вот только вопроса нету. Что именно не так или что хочется сделать?
Одним глазом посмотрел код. В конструкторе, который принимает укатель на char, не проставляется терминирующий ноль. Во втором конструкторе, терминирующий ноль проставляется в неправильно место (должен проставляться в n-й символ).
Re: Задачка на C++, ПОМОГИТЕ ПОЖАЛУЙСТА НЕДОПРОГРАММИСТУ
Добавлено: 27 ноя 2013, 16:00
Мария1501
здесь нужно сделать всё как в задании, редактируйте пожалуйста что не правильно
Re: Задачка на C++, ПОМОГИТЕ ПОЖАЛУЙСТА НЕДОПРОГРАММИСТУ
Добавлено: 27 ноя 2013, 16:10
Romeo
Моя задача, чтобы вы сами разобрались в программе. Так что я буду не редактироваться, я буду лишь подсказывать.
Re: Задачка на C++, ПОМОГИТЕ ПОЖАЛУЙСТА НЕДОПРОГРАММИСТУ
Добавлено: 27 ноя 2013, 16:20
Мария1501
После редактирования вышла вот такая программа, она работает, но всё ли в ней соответствует заданию???
Код: Выделить всё
#include <cstdlib>
#include <iostream>
using namespace std;
class String
{
public:
String(char* string = "")
{
n = strlen(string) + 1;
str = new char[n];
memcpy(str, string, n);
}
String(char* string, size_t size) //êîíñòðóêòîð, ïîçâîëÿþùèé ñîçäàòü ñòðîêó èç size ñèìâîëîâ
{
n = size + 1;
str = new char[n];
memcpy(str, string, n * sizeof(char));
str[size] = 0;
}
~String()
{
if (str)
delete str;
}
void print()
{
std::cout << str << std::endl;
}
int const getnum() //êîë-âî ñèìâîëîâ â ñòðîêå
{
return n - 1;
}
char const getchar(int n) // ñèìâîë èç ïîçèöèè n
{
return str[n - 1];
}
void upper() // â âåðõíèé ðåãèñòð
{
for (int i = 0; i < n; i++)
str[i] = toupper(str[i]);
}
int const punctuation() // êîë-âî çíàêîâ ïðåïèíàíèÿ
{
int count = 0;
for (int i = 0; i < n; i++)
if (ispunct(str[i]))
count++;
return count;
}
private:
char* str;
int n;
};
int main()
{
String str("I!love!!!Programmirovanie!");
str.upper();
str.print();
std::cout << str.getnum() << std::endl;
std::cout << str.punctuation() << std::endl;
std::cout << str.getchar(1) << std::endl;
system("PAUSE");
return 0;
}
Re: Задачка на C++, ПОМОГИТЕ ПОЖАЛУЙСТА НЕДОПРОГРАММИСТУ
Добавлено: 27 ноя 2013, 16:23
Мария1501
Romeo писал(а):Моя задача, чтобы вы сами разобрались в программе. Так что я буду не редактироваться, я буду лишь подсказывать.
Если Вы поможете мне разобраться в программе, будет очень здорово, так как мне еще экзамен сдавать

Re: Задачка на C++, ПОМОГИТЕ ПОЖАЛУЙСТА НЕДОПРОГРАММИСТУ
Добавлено: 27 ноя 2013, 17:21
Romeo
Мария1501 писал(а):После редактирования вышла вот такая программа, она работает, но всё ли в ней соответствует заданию???
Мария, вы меня зарезали без ножа. Вы взяли программу однокурсника, который слушает Linkin Park, написали в тестрируемой строке "I!love!!!Programmirovanie!", также изменили табуляцию в одном из методов, и теперь хотите сдать эту программу, выдав за свою? На самом деле я ожидал, что вы исправите ошибку, на которую я указал ранее, а не убьёте остатки моей мотивации транслитерированным словом "Programmirovanie". Вы меня извините, но я в этой теме больше ничего писать не буду.
И кстати, то, что у вас экзамен, не освобождает вас от необходимости учиться.
Re: Задачка на C++, ПОМОГИТЕ ПОЖАЛУЙСТА НЕДОПРОГРАММИСТУ
Добавлено: 27 ноя 2013, 17:58
Мария1501
Romeo писал(а):Мария, вы меня зарезали без ножа. Вы взяли программу однокурсника, который слушает Linkin Park, написали в тестрируемой строке "I!love!!!Programmirovanie!", также изменили табуляцию в одном из методов, и теперь хотите сдать эту программу, выдав за свою? На самом деле я ожидал, что вы исправите ошибку, на которую я указал ранее, а не убьёте остатки моей мотивации транслитерированным словом "Programmirovanie". Вы меня извините, но я в этой теме больше ничего писать не буду.
И кстати, то, что у вас экзамен, не освобождает вас от необходимости учиться.
я не брала программу однокурсника, эту программу мне помогли составить другие люди, "I!love!!!Programmirovanie!" я написала уже в ходе компиляции, чтобы посмотреть как ведет себя программа, а то, что вы указали исправить я просто напросто не знаю, так как я не программист и не собираюсь им становится, не обязательно так эмоционально реагировать, я не выдаю себя за гения программирования, я учусь, я перерыла уже кучу литературы, но для меня это всё как на китайском языке, так что извините, я выкручиваюсь как могу, чтобы сделать то что требуют.
Re: Задачка на C++, ПОМОГИТЕ ПОЖАЛУЙСТА НЕДОПРОГРАММИСТУ
Добавлено: 27 ноя 2013, 21:12
Romeo
Извиняюсь за эмоции. Если вы готовы разбирать, то я окажу всяческую помощь. Просто я не знаю, откуда начать. Что такое класс, его конструктор и деструтор нужно объяснять? Или ещё раньше начать? Что такое переменная? Или наоборот всё понятно с классами, но не понятно, что такое терминирующий ноль?
Оценю конретные вопросы, на которые я с удовольствием отвечу.
Re: Задачка на C++, ПОМОГИТЕ ПОЖАЛУЙСТА НЕДОПРОГРАММИСТУ
Добавлено: 27 ноя 2013, 21:20
Мария1501
Romeo писал(а):Извиняюсь за эмоции. Если вы готовы разбирать, то я окажу всяческую помощь. Просто я не знаю, откуда начать. Что такое класс, его конструктор и деструтор нужно объяснять? Или ещё раньше начать? Что такое переменная? Или наоборот всё понятно с классами, но не понятно, что такое терминирующий ноль?
Оценю конретные вопросы, на которые я с удовольствием отвечу.
Если можно с самого начала, потому что у нас супер система обучения, где не объясняя практически ничего толком требуют сразу выполнения лабораторных работ, следовательно если я не знаю элементарных понятий об этом языке не знаю как составлять программы, мне бы понять как последовательно должна выглядеть программа, что как называется, понятие класс конструктор деструктор я вроде как поняла, а как они применяются нет
И конкретно этой задачи да, что такое терминирующий ноль, где его писать, и где во втором констукторе