Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2013, 14:10   #1
Мария1992
Пользователь
 
Регистрация: 17.05.2013
Сообщений: 20
По умолчанию Помогите пожалуйста решить задачу

В С++ Создать класс для работы сo строками. Разработать элементы класса:
a. Поля:
• * указатель на char - хранит адрес динамически выделенной памяти;
• int n.
b. Конструктор, позволяющий создать строку из n символов.
c. Методы, позволяющие:
• подсчитать количество знаков препинания в строке;
• заменить в строке все строчные символы на прописные;
• прочитать символ из заданной позиции.
d. Свойства:
• возвращающее общее количество элементов в строке (доступное только для чтения);
• позволяющее установить значение поля, в соответствии с введенным значением строки с клавиатуры, а также получить значение данного поля (доступно для чтения и записи).


Получилась вот такая ерунда
Код:
using namespace std;
class String
{
private:
    char * string;
public:
String()
    {
        int size = 80;
        string = new char[size];
    }
    String(char * string)
    {
        string = new char[];
    }
void Initialization()
    {
        cout<<"Введите строку: ";
        gets(string);
        system("cls");
        ChoiseShowString();
        }
int main()//подсчитать количество знаков препинания в строке;
{
 setlocale(0, "");
    
    char *str = "Как,,Я люблю,,программирование,,!";
    int len = strlen(str);
    int punctCount = 0;
    for(int i = 0; i < len; i++)
    {
        if(ispunct((unsigned char)str[i])) punctCount++;
    }
    cout << str << endl;
    cout << "Punct count = " << punctCount << endl;
         //прочитать  символ из заданной позиции.

         

 

    system("pause");
    return 0;
}

Последний раз редактировалось Stilet; 26.11.2013 в 14:57.
Мария1992 вне форума Ответить с цитированием
Старый 26.11.2013, 19:37   #2
Мария1992
Пользователь
 
Регистрация: 17.05.2013
Сообщений: 20
По умолчанию Re: Задача

Есть тут сочувствующие, которые помогут с задачей??
Мария1992 вне форума Ответить с цитированием
Старый 26.11.2013, 22:59   #3
troyan90
Пользователь
 
Регистрация: 23.06.2011
Сообщений: 54
По умолчанию

Код:
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;
}
troyan90 вне форума Ответить с цитированием
Старый 27.11.2013, 12:03   #4
Мария1992
Пользователь
 
Регистрация: 17.05.2013
Сообщений: 20
По умолчанию

Цитата:
Сообщение от troyan90 Посмотреть сообщение
Код:
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;
}

Здесь сделано так как должно быть в задании?
Мария1992 вне форума Ответить с цитированием
Старый 27.11.2013, 13:51   #5
Unique_Maks
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 89
По умолчанию

замените
Код:
int _tmain(int argc, _TCHAR* argv[])
на
Код:
int main()
Unique_Maks вне форума Ответить с цитированием
Старый 27.11.2013, 16:03   #6
Мария1992
Пользователь
 
Регистрация: 17.05.2013
Сообщений: 20
По умолчанию А по заданию всё выполнено?

Код:
#include <cstdlib>
#include <iostream>

using namespace std;

class String
{
private:
	char* str;
	int n; 
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;
	}
};

int main()
{ 
	String str("I!love!!!programming!");
	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;
}
как мне сделать чтобы текст вводился самим пользователем?

Последний раз редактировалось Мария1992; 27.11.2013 в 23:24.
Мария1992 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пожалуйста помогите решить задачу Answer26 Помощь студентам 1 23.12.2009 21:15
Помогите пожалуйста решить задачу на C# $Anya$ Помощь студентам 1 15.11.2009 16:02
Помогите решить задачу пожалуйста Никитка89 Паскаль, Turbo Pascal, PascalABC.NET 3 29.05.2008 08:35