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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2010, 23:04   #1
LuBuMaster
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 56
Радость Переопределить оперцаю сложения

Добрый вечер.
Вообщем надо написать программу сложения двух строк, причём так, что бы 1 буква 1 строки складывалась с 1 буквой 2 строки, а именно
мама+папа=мпаампаа

и вот столкнулся с проблемой вывода формулы =(((
не подскажете?
вот мой код, если вы заметите ошибки, то пожалуйста укажите мне на них! буду оч благодарен!


#include "iostream"
#include "string.h"

using namespace std;

class string
{
public:
char _string[100];

void SetS()
{
cout << "Введите слово" << endl;
cin >> _string;
}



void summa
{




}
};


void main()
{
char a;
setlocale(0, "Rus");

string s1, s2;
s1.Set_S();
s2.Set_S();
cout << "Результат сложения: ";
cout << " \n";



system("Pause");
}
LuBuMaster вне форума Ответить с цитированием
Старый 05.05.2010, 23:30   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Перегрузил оператор + для твоего класса
Код:
#include <iostream>
#include "string.h"

using namespace std;

class String
{
public:
	char _string[100];
	void SetS()
	{
		cout << "Введите слово" << endl;
		cin >> _string;
	}

	const String operator + (const String &right)
	{
		String res;
		int ai = 0, bi = 0, shag = 1, ind = 0;
		while(ai < strlen(_string) || bi < strlen(right._string))
		{
			if(ai == strlen(_string))
				res._string[ind++] = right._string[bi++];
			else if(bi == strlen(right._string))
				res._string[ind++] = _string[ai++];
			else
			{
				if(shag % 2 == 0)
					res._string[ind++] = right._string[bi++];
				else
					res._string[ind++] = _string[ai++];
				shag++;
			}
		}
		res._string[ind] = '\0';
		return res;
	}
	
	void print()
	{
		cout << _string;
	}

};


int main()
{
	setlocale(0, "Rus");
	String s1, s2, sum;
	s1.SetS();
	s2.SetS();
	sum = s1 + s2;
	cout << "Результат сложения: ";
	sum.print();
	system("Pause");
	return 0;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 05.05.2010, 23:30   #3
Crudelis
Пользователь
 
Аватар для Crudelis
 
Регистрация: 05.04.2010
Сообщений: 56
По умолчанию

а зачем делать формулу сложения, просто сделайте вывод букв поочередно из двух строк, зачем делать 3й массив если можо сделать так:

Код:
void summa (char s1, char s2)
{
int l=strlen(s1);
int m=strlen(s2);
if(s1==s2)
{
for(int i=0;i<l;i++)
{

cout<<s1[i];
cout<<s2[i];

}
}
if(s1<s2)
{
for(int i=0;i<l;i++)
{
if(i<m)
{
cout<<s1[i];
cout<<s2[i];
}
else
cout<<s2[i];
}
if(s1>s2)
{
for(int i=0;i<m;i++)
{
if(i<l)
{
cout<<s1[i];
cout<<s2[i];
}
else
cout<<s1[i];
}


}
}
}
сout<<"Изучаю программирование" точка с запятой
Crudelis вне форума Ответить с цитированием
Старый 06.05.2010, 02:06   #4
LuBuMaster
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 56
По умолчанию

еслия всё вернов стаивл то получается так, но ошибок выдаёт уйму! в Windiws Visual Studio

#include "iostream"
#include "string.h"

using namespace std;

class string
{
public:
char _string[100];

void SetS()
{
cout << "Введите слово" << endl;
cin >> _string;
}



void summa (char s1, char s2)
{
int l=strlen(s1);
int m=strlen(s2);
if(s1==s2)
{
for(int i=0;i<l;i++)
{

cout<<s1[i];
cout<<s2[i];

}
}
if(s1<s2)
{
for(int i=0;i<l;i++)
{
if(i<m)
{
cout<<s1[i];
cout<<s2[i];
}
else
cout<<s2[i];
}
if(s1>s2)
{
for(int i=0;i<m;i++)
{
if(i<l)
{
cout<<s1[i];
cout<<s2[i];
}
else
cout<<s1[i];
}

}
}
}
};


void main()
{
char a;
setlocale(0, "Rus");

string s1, s2;
s1.SetS();
s2.SetS();
cout << "Результат сложения: ";
cout << " \n";



system("Pause");

}
LuBuMaster вне форума Ответить с цитированием
Старый 06.05.2010, 02:09   #5
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

LuBuMaster, мой способ и лучше и работает правильно! Используй его
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 06.05.2010, 02:10   #6
LuBuMaster
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 56
По умолчанию

Ozerich

cпасибо за код! работает! правда немного сложный)))

а вы не могли бы под мою прогу сделать этот оператор сложения если не сложно?
просто вы используете сложные команды) я таких не знаю и при сдаче могу завалиться =(
LuBuMaster вне форума Ответить с цитированием
Старый 06.05.2010, 02:17   #7
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

LuBuMaster, ничего тут сложного нету. Используется перегрузка оператора сложения, т.е ты сейчас можешь складывать классы типа string обычным оператором +.

Например у тебя в примере создаются s1 и s2. Ты их можешь сложить как (s1+s2) и записать результат в третью переменную.

Как с интами
Код:
int s1 = 1;
int s2 = 2;
int sum = s1 + s2  //1 + 2
так и со стрингами

Код:
	
string s1;s1.SetS();
string s2;s2.SetS();
string sum = s1 + s2;
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 06.05.2010, 02:25   #8
LuBuMaster
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 56
По умолчанию

ооо)) спасибо!)))))
но это в принципе понятно, меня больше пугает оператор сам

const String operator + (const String &right)
{
String res;
int ai = 0, bi = 0, shag = 1, ind = 0;
while(ai < strlen(_string) || bi < strlen(right._string))
{
if(ai == strlen(_string))
res._string[ind++] = right._string[bi++];
else if(bi == strlen(right._string))
res._string[ind++] = _string[ai++];
else
{
if(shag % 2 == 0)
res._string[ind++] = right._string[bi++];
else
res._string[ind++] = _string[ai++];
shag++;
}
}


вотв самом начале ещё я тут не воткнул

(const String &right)

и что означем res. и right. ?
остальное в принципе понятно)

Последний раз редактировалось LuBuMaster; 06.05.2010 в 02:28.
LuBuMaster вне форума Ответить с цитированием
Старый 06.05.2010, 02:38   #9
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

res это переменная результата, а right это второе слагаемое
res = this(cам класс) + right

Тег [code] не забывай
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 06.05.2010, 02:41   #10
Crudelis
Пользователь
 
Аватар для Crudelis
 
Регистрация: 05.04.2010
Сообщений: 56
По умолчанию

и правда накрутил, во всех if перепутал переменные, нужно было сравнивать l и m везде, но думаю что код Ozerich и действительно лучше и работает)
сout<<"Изучаю программирование" точка с запятой
Crudelis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему inc работает быстрее обычного сложения Rusl92 Паскаль, Turbo Pascal, PascalABC.NET 9 26.04.2010 11:58
програма для умножения и сложения таблицы NoVeto Общие вопросы C/C++ 6 09.02.2010 12:52
Переопределить функцию DirtyBASS Помощь студентам 0 07.11.2009 15:46
Помогите! не могу переопределить Click 4kir Общие вопросы C/C++ 2 12.01.2008 22:09