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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 16:15   #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(){};
	~String()
	{
		delete [] str1;
		delete [] str3;
	}
	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];
	for(int i=0;i<len;i++)
	{
		for(int j=0;j<N.len;j++)
		{
			if(str1[i]==N.str1[j])
				strncat(str3,str1[i],1);
		}
	}
	return *this;
}
String& String:: operator =(String &N)
{
	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;
}
Что за ошибка, помогите пожалуйста:
Цитата:
error C2664: strncat: невозможно преобразовать параметр 2 из 'char' в 'const char *'
Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
Если прописать strncat(str3,&str1[i],1); то ошибок нет, но вот работа программы:
ввожу 1ю строку, ввожу 2ю, когда дело доходит до умножения программа виснет и выдает ошибку.
сout<<"Изучаю программирование" точка с запятой
Crudelis вне форума Ответить с цитированием
Старый 10.06.2010, 16:20   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Код:
strncat(str3,str1[i],1);
Второй параметр должен быть строкой, а не символом
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 10.06.2010, 16:32   #3
Crudelis
Пользователь
 
Аватар для Crudelis
 
Регистрация: 05.04.2010
Сообщений: 56
По умолчанию

ок понял, тогда другой вопрос, мне нужно в строку 3 в конец записывать по одному символу, какой функцией пользоваться, подскажите пожалуйста
сout<<"Изучаю программирование" точка с запятой
Crudelis вне форума Ответить с цитированием
Старый 10.06.2010, 16:45   #4
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Код:
char s3[100];
char s1[100];
strncat(s3,s1,1);
На С++ ведь пишешь, почему бы не воспользоваться std::string?
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer

Последний раз редактировалось Ozerich; 10.06.2010 в 16:48.
Ozerich вне форума Ответить с цитированием
Старый 10.06.2010, 17:05   #5
Crudelis
Пользователь
 
Аватар для Crudelis
 
Регистрация: 05.04.2010
Сообщений: 56
По умолчанию

смысл задачи в том чтоб проверять две строки, если у них есть одинаковые символы то символ нужно записать в третью строку и так нужно проверить две строки до конца
сout<<"Изучаю программирование" точка с запятой
Crudelis вне форума Ответить с цитированием
Старый 10.06.2010, 17:06   #6
Crudelis
Пользователь
 
Аватар для Crudelis
 
Регистрация: 05.04.2010
Сообщений: 56
По умолчанию

я уже пробовал:
Код:
int z=0;
............

if(str1[i]==N.str1[j])
			{
				str3[z]=str1[i];
				z++;
			}
но тоже выдает ошибку
сout<<"Изучаю программирование" точка с запятой
Crudelis вне форума Ответить с цитированием
Старый 10.06.2010, 17:22   #7
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Цитата:
но тоже выдает ошибку
Что такое N? что такое str3?
Покажи весь код
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 10.06.2010, 17:52   #8
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

Цитата:
Сообщение от Crudelis Посмотреть сообщение
смысл задачи в том чтоб проверять две строки, если у них есть одинаковые символы то символ нужно записать в третью строку и так нужно проверить две строки до конца
Код:
#include <iostream>
using namespace std;
char* f(char *a, char *b){
	char *c=new char[100];
	int i,j,k;
	for(i=k=0;a[i];i++){
		for(j=0;j<i;j++)
			if(a[i]==a[j])
				break;
		if(j==i){
			for(j=0;b[j];j++)
				if(a[i]==b[j])
					break;
			if(b[j])
				c[k++]=a[i];
		}
	}
	c[k]=0;
	return c;
}
int main(){
	char *a,*b,*c;
	a=new char[100];
	b=new char[100];
	strcpy(a,"asdfgh");
	strcpy(b,"sddqwe");
	c=f(a,b);
	cout<<c;
	cin.get(),cin.get();
	return 0;
}
rrrFer вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача ссылки в функцию класса на данный класс Impuls1989 Общие вопросы C/C++ 17 09.01.2010 17:21
строковый тип gessi Помощь студентам 3 25.11.2009 09:40
Строковый тип Koshmarick Помощь студентам 8 05.11.2009 12:37
добавить функцию, С xalex17 Помощь студентам 3 12.11.2008 03:39
строковый калькулятор *Лена* Фриланс 4 06.05.2008 00:41