Здравствуйте. Задача: создать класс символьной строки и несколько объектов разработанного класса (a,b,c). Реализовать для объектов данного класса перегрузку оператора operator- (с = a - b: a = "Privet", b = "vet" -> c = "Pri")
Не получается придумать, как перегрузить оператор -, помогите пожалуйста.
#include "stdafx.h"
#include <iostream>
#include <string>
#pragma warning(disable : 4996)
using namespace std;
class String
{
private:
char *str;
int len;
public:
String();
String(char *s);
String(const String &str);
~String();
String operator - (const String &op);
void input();
void output();
};
String::String()
{
len = 0;
str = new char[1];
*str = 0;
}
String::String(char *s)
{
len = strlen(s);
str = new char[len + 1];
for (int i = 0; i < len; i++)
str[i] = s[i];
str[len] = '\0';
}
String::String(const String &a)
{
len = a.len;
str = new char[len + 1];
for (int i = 0; i < len; i++)
str[i] = a.str[i];
str[len] = '\0';
}
String::~String()
{
if (str) delete[] str;
}
String String::operator - (const String &op)
{
//???
}
void String::output()
{
cout << "new string: " << str << endl;
}
void String::input()
{
cout << "input string: ";
cin>>str;
}
int main()
{
String a("laba");
String b("ba");
String c;
c = a - b;
c.output();
return 0;
system("pause");
}
Хм... не совсем четко поставлено условие.
Я бы сделал что-то вроде
String String::operator - (const String &op)
{
String res(*this);
char * where = strstr(res.str,op.str);
if (where)
{
memmove(where,where+strlen(op.str),
strlen(where+strlen(op.str))+1);
res.len = strlen(res.str);
}
return res;
}
Т.е. удаление первого вхождения op. Всякие проверки безопасности (ненулевые указатели и т.п.) я для простоты опустил.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости