Страница 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 писал(а):Извиняюсь за эмоции. Если вы готовы разбирать, то я окажу всяческую помощь. Просто я не знаю, откуда начать. Что такое класс, его конструктор и деструтор нужно объяснять? Или ещё раньше начать? Что такое переменная? Или наоборот всё понятно с классами, но не понятно, что такое терминирующий ноль?

Оценю конретные вопросы, на которые я с удовольствием отвечу.

Если можно с самого начала, потому что у нас супер система обучения, где не объясняя практически ничего толком требуют сразу выполнения лабораторных работ, следовательно если я не знаю элементарных понятий об этом языке не знаю как составлять программы, мне бы понять как последовательно должна выглядеть программа, что как называется, понятие класс конструктор деструктор я вроде как поняла, а как они применяются нет
И конкретно этой задачи да, что такое терминирующий ноль, где его писать, и где во втором констукторе