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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2010, 13:05   #1
Freddi Krjuger
Пользователь
 
Регистрация: 20.08.2010
Сообщений: 37
По умолчанию не правельно выводит строку.

Добрый день!
Задание:
Создайте класс Строка с обязательными член–данными: длина строки, указатель на строку (строка хранится в динамически выделенной памяти). Обязательные методы: конструктор по заданной длине строки, конструктор по заданной строке, конструктор по другому объекту класса Строка, конструктор копирования, очистка строки, вывод строки.
Перегрузить (переопределить) операции: + (конкатенация ), -(разность: удаление символов входящих в строку второго операнда), < (меньше), > (больше).

Перегрузил оператор -,удаляются символы правельно но функция show показывает новую строку и мусор после неё,как убрать этот мусор чтоб выводилась только строка без всяких &*^&^*$@#$.

Код:
#include "stdafx.h"
#include"iostream"
using namespace std;
#include"string"
using namespace std;

class stroka
{
public:
	
	//////////////////////
	stroka(int x)
	{
		str=new char[x];
	
		cout<<"Vvedite stroku iz "<<x-1<<" elementov";
 		cin.getline(str,x,'\n');
		sPtr=str;
	}
	stroka(int x,int y)
	{
		str=new char[x];
		n=x;
	}
	stroka(char *s)
	{
		int d;
		d=strlen(s);
		str=new char[d];
		strcpy(str,s);
		sPtr=str;
	}

	stroka (stroka &q)
	{
		int x;
		x=strlen(q.str);
		str=new char[x];
		strcpy(str,q.str);
		sPtr=str;
	}

	void setn(int x)
	{
		n=x;
	}
	char getstr()
	{
		return *str;
	}
	void show()
	{
		cout<<str;
	}
////////////////////////////////перегрузка
	
stroka friend operator+(stroka &a,stroka &b)
{
	
	char *s;
	s=strcat(a.str,b.str);
	stroka x(s);
	return x;
}
stroka friend operator-(stroka &a,stroka &b)
{

	char *t;
	t=new char;
	int e=0,asize,bsize,r=0;
	asize=strlen(a.str);
	bsize=strlen(b.str);
    char *at=a.str;
	char *bt=b.str;

	for(int i=0;i<asize;i++)
	{
		bt=b.str;
		for(int j=0;j!=bsize;j++,bt++)
		{
			if(*(at+i)==*bt)
			{
           
				*(at+i)='*';
			}
		}
    }

	for(int i=0;i<asize;i++)
		if(*(at+i)!='*')
		{
			*(t+r)=*(at+i);
				r++;
		}

	//stroka h(t);
	a.str=t;
	return a.str;
	//return h;
}


private:
	static int sa[15];
	int n;
	char *sPtr;
	char *str;
	
};


void main()
{
	stroka k("sdghljkh");
	stroka q("sghrew");
	k=k-q;
	k.show();//не правельно выводит строку
}
Freddi Krjuger вне форума Ответить с цитированием
Старый 31.10.2010, 13:09   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Думаю, надо после последнего символа поставить 0 (он же '\0'), и будет нормально.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 31.10.2010, 13:25   #3
Freddi Krjuger
Пользователь
 
Регистрация: 20.08.2010
Сообщений: 37
По умолчанию

не получается(( ставит '\0' в конце после всех символов и выводит тоже самое.

пробывал передать число символов объекту но после return значение теряется

Последний раз редактировалось Stilet; 31.10.2010 в 15:34.
Freddi Krjuger вне форума Ответить с цитированием
Старый 31.10.2010, 14:27   #4
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Пробежался взглядом:
Код:
#include "stdafx.h"
#include"iostream"
using namespace std;
#include"string"
using namespace std;

class stroka
{
public:
	
	//////////////////////
	stroka(int x)
	{
		str=new char[x];
	
		cout<<"Vvedite stroku iz "<<x-1<<" elementov";
 		cin.getline(str,x,'\n');
		sPtr=str;
	}
	stroka(int x,int y)
	{
		str=new char[x];
		n=x;
	}
	stroka(char *s)
	{
		int d;
		d=strlen(s);
		str=new char[d];
		strcpy(str,s);
		sPtr=str;
	}

	stroka (stroka &q)
	{
		int x;
		x=strlen(q.str);
		str=new char[x];
		strcpy(str,q.str);
		sPtr=str;
	}

	void setn(int x)
	{
		n=x;
	}
	char getstr()
	{
		return *str;
	}
	void show()
	{
		cout<<str;
	}
////////////////////////////////перегрузка
	
stroka friend operator+(stroka &a,stroka &b)
{
	
	char *s;
	s=strcat(a.str,b.str);
	stroka x(s);
	return x;
}
stroka friend operator-(stroka &a,stroka &b)
{

	char *t;
	t=new char[strlen(a.str)+1];	int e=0,asize,bsize,r=0;
	asize=strlen(a.str);
	bsize=strlen(b.str);
    char *at=a.str;
	char *bt=b.str;

	for(int i=0;i<asize;i++)
	{
		bt=b.str;
		for(int j=0;j!=bsize;j++,bt++)
		{
			if(*(at+i)==*bt)
			{
           
				*(at+i)='*';
			}
		}
    }

	for(int i=0;i<asize;i++)
		if(*(at+i)!='*')
		{
			*(t+r)=*(at+i);
				r++;
		}

	//stroka h(t);
	t[r] = '\0'; 	a.str=t;
	return a.str;
	//return h;
}


private:
	static int sa[15];
	int n;
	char *sPtr;
	char *str;
	
};


void main()
{
	stroka k("sdghljkh");
	stroka q("sghrew");
	k=k-q;
	k.show();//не правельно выводит строку
}
Но в чем смысл так и не понял.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 31.10.2010, 14:31   #5
Freddi Krjuger
Пользователь
 
Регистрация: 20.08.2010
Сообщений: 37
По умолчанию

оо работает спасибо большое)) смысл чего?
Freddi Krjuger вне форума Ответить с цитированием
Старый 31.10.2010, 14:34   #6
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Смысл operator-.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 31.10.2010, 14:34   #7
Freddi Krjuger
Пользователь
 
Регистрация: 20.08.2010
Сообщений: 37
По умолчанию

так в задаче требуют,вот и пришлось делать
Freddi Krjuger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правельно ли? Shiny_babe Помощь студентам 3 07.10.2010 16:22
Не пойму что не правельно ...(С++) exKenny Помощь студентам 38 06.03.2010 16:51
passthru выводит только одну строку motorway PHP 5 07.07.2009 21:27
Программа Вводит символьную строку и число N и выводит строку, состоящую из первых N символов (С++) Yulai Помощь студентам 1 11.05.2009 11:39