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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 22:39   #1
Crudelis
Пользователь
 
Аватар для Crudelis
 
Регистрация: 05.04.2010
Сообщений: 56
Печаль Выдает ошибку, не могу найти

Код:
//Добавить в строковый класс функцию, которая создает строку, 
//содержащую пересечение двух строк, то есть общие символы для двух строк.
//Например, результатом пересечения строк "sdqcg" "rgfas34" будет строка "sg". 
//Для реализации функции перегрузить оператор * (бинарное умножение). 
#include<iostream>
using namespace std;
class String
{
        char *str1;
        char *str3;
        int len;
public:
        String(){str1 = NULL; str3 = NULL;}
        ~String()
        {
                delete [] str1;
                delete [] str3;
				cout<<"destruct\n";
        }
        void Inps1();
        String& operator *(String &N);
        String& operator =(String &N);
        void Showrez();
 
};
void String::Inps1()
{
        char a[256];
        gets(a);
        len=strlen(a)+1;
        str1 = new char[len];
        strcpy(str1,a);
}
String& String:: operator *(String &N)
{
        int tem=1;
        len=strlen(str1)+1;
        N.len=strlen(N.str1)+1;
        for(int i=0;i<len;i++)
        {
                for(int j=0;j<N.len;j++)
                {
                        if(str1[i]==N.str1[i])
                                tem++;
                }
        }
        str3 = new char[tem];
        str3[0] = '\0';
		int q=0;
        for(int i=0;i<len;i++)
        {
                for(int j=0;j<N.len;j++)
                {
                        if(str1[i]==N.str1[j]&&str3[q]!=str3[q-1])
						{
                                str3[q]=str1[i];
								q++;
						}
                }
        }
        return *this;
}
String& String:: operator =(String &N)
{
        if (str1)
           delete [] str1;
        if (str3)
           delete [] str3;
        str1 = new char[strlen(N.str1+1)];
        str3 = new char[strlen(N.str3+1)];
        strcpy(str1,N.str1);
        strcpy(str3,N.str3);
        len=N.len;
        return *this;
}
void String::Showrez()
{
	cout<<"Результат умножения двух строк: "<<str3<<endl;
}
void main()
{
	setlocale(LC_CTYPE,"Rus");
	String A,B,C;
	cout<<"Введите первую строку\n";
	A.Inps1();
	cout<<"Введите вторую строку\n";
	B.Inps1();
	C=A*B;
	C.Showrez();
	cout<<endl;
}
ошибка указывает на неправильное выделение памяти, но не могу понять где...
Изображения
Тип файла: jpg d1.JPG (28.6 Кб, 65 просмотров)
сout<<"Изучаю программирование" точка с запятой
Crudelis вне форума Ответить с цитированием
Старый 10.06.2010, 22:42   #2
Crudelis
Пользователь
 
Аватар для Crudelis
 
Регистрация: 05.04.2010
Сообщений: 56
По умолчанию

ошибку нашел)))))))))

Код:
        str1 = new char[strlen(N.str1)+1];
        str3 = new char[strlen(N.str3)+1];
вот часто за собой замечаю, только полезу на форум с просьбой помочь, как сам нахожу ошибку)))))))))
сout<<"Изучаю программирование" точка с запятой
Crudelis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибку maxistudent Общие вопросы C/C++ 6 29.04.2010 20:52
С++. не могу найти ошибку world12_tk Помощь студентам 3 25.07.2009 10:47
Не могу найти ошибку . KVANTOM Общие вопросы Delphi 2 08.01.2009 17:15