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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2013, 15:15   #1
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию строковый класс

Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. Например, результатом пересечения строк "sdqcg" "rgfas34" будет строка "sg". Для реализации функции перегрузить оператор * (бинарное умножение). Подскажите плиз как найти одинаковый буквы.

Код:
#include <iostream>
#include <string>
using namespace std;
class myString
{
private:
	string s1;
public:
	myString();
	myString(string x);
	myString operator+(const myString &b);
	void Display(void);
};

myString::myString()
{
}

myString::myString(string x)
{
s1=x;
}

myString myString::operator+(const myString &b)
{
myString result;
result.s1=s1+b.s1;
return result;
}

void myString::Display()
{
cout<<s1<<endl;
}

void main()
{
myString ekz1("mersedes"),ekz2("porshe"),ekz3=ekz1+ekz2;
ekz3.Display();
system("pause");
}
mixon-21 вне форума Ответить с цитированием
Старый 31.07.2013, 16:20   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

либо вложенным циклом - сложность O(n^2)
либо засунь буквы первой строки в std::map и в цикле по второй строке ищи буквы в map - сложность O(n*log(n)) = O(n*log(n))
либо (если в строках не юникоды) можешь потратить много памяти и засовывать символы не в map, а в обычный массив - тогда можно получить сложность O(n) - но потратишь лишнюю память (количество которой, впрочем, от n не зависит).
rrrFer вне форума Ответить с цитированием
Старый 31.07.2013, 16:36   #3
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
Печаль

???????????????????
mixon-21 вне форума Ответить с цитированием
Старый 31.07.2013, 16:49   #4
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Код:
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
class myString
{
private:
    string s1;
public:
    myString();
    myString(string x);
    myString operator+(const myString &b);
    myString operator*(const myString &b);
    void Display(void);
};
 
myString::myString()
{
}
 
myString::myString(string x)
{
s1=x;
}
 
myString myString::operator+(const myString &b)
{
myString result;
result.s1=s1+b.s1;
return result;
}
myString myString::operator*(const myString &b)
{
    myString result;
    const char* first = s1.c_str(), *second = b.s1.c_str(), *p;
    int i=0;
    char ch[100]=" ";
    for ( p = first; *p; ++p )
        if ( strchr(second, *p) )
        {ch[i++]=*p;}
        result.s1=(const char*)ch;
        return result;
}
    
 
 
 
void myString::Display()
{
cout<<s1<<endl;
}
 
void main()
{
myString ekz1("mersedes"),ekz2("porshe"),ekz3=ekz1*ekz2;
ekz1.Display();
ekz2.Display();
ekz3.Display();
system ("color 2");
 
system("pause");
}
mixon-21 вне форума Ответить с цитированием
Старый 31.07.2013, 17:45   #5
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

как там это для твоего класса вкрутить я хз, код отформатирован как попало, мне зрение дороже.

Цитата:
содержащую пересечение двух строк, то есть общие символы для двух строк.
Код:
  std::string s1 = "mama chisto", s2 = "mila ramu", result;
  bool buff1[255] = {false}, buff2[255] = {false};

  for (unsigned char t : s1)
    buff1[t] = true;
  for (unsigned char t : s2)
    buff2[t] = true;

  for (int i = 0; i < 255; ++i)
    if (buff1[i] & buff2[i])
      result += i;
При этом символы результата будут отсортированы по алфавиту (в твоей формулировке задачи я не заметил слова о порядке символов).
rrrFer вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cоздать класс жидкость. определить конструкторы деструкторы и функцию печати. создать публик производный класс. (С++) Динар Габбасов Помощь студентам 0 28.05.2012 18:44
Добавить класс в проект2,похожий на класс из проекта1!оба проекта есть! xeops C# (си шарп) 0 15.05.2012 20:31
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
Описать класс-родитель и класс-потомок. Delphi 7 Andrew_M Помощь студентам 0 15.01.2011 14:42
Добавить в строковый класс функцию Crudelis Общие вопросы C/C++ 7 10.06.2010 17:52