Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sergentiy
0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 44
#1

Перегрузка оператора * и / для строки - C++

21.06.2016, 12:05. Просмотров 149. Ответов 5
Метки нет (Все метки)

Есть класс MyString нужно написать перезагрузку
Операция *: должна вернуть новую строку, которая возникнет путем пересечения двух строк, то есть их общие символы. Наприклад, результатом пересечения строк "Microsoft" и "Windows" будет строка "ioso".
Операция /: должна вернуть новую строку, которая возникнет путем отбора символов первой строки, которых нету в другой. Наприклад, результатом пересечения строк "Microsoft" и "Windows" буде строка "Mcrft".

Я накидал что-то типа

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char* operator * (MyString& str2)
    {
        for (char i = 0; i < strlen(this->strChar); i++)
        {
            for (char j = 0; j < strlen(str2.strChar); j++)
            {
                if (this->strChar[i] == str2.strChar[j])
                {
                    return this->strChar[i];
                }
            }
        }
    }
суть алгоритма примерно понятна, но как реализовать через перезагрузку... затрудняюсь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2016, 12:05     Перегрузка оператора * и / для строки
Посмотрите здесь:

Перегрузка оператора *= для vector<int> C++
Перегрузка оператора == для string C++
Перегрузка оператора- для шаблона класса C++
Перегрузка оператора, для множественного использования C++
Перегрузка оператора ( ) для объектов класса C++
C++ Перегрузка оператора = для указателей
C++ Перегрузка оператора + для стека
C++ Перегрузка оператора == для двух векторов
C++ Перегрузка оператора для класса
Перегрузка оператора << для шаблона C++
Перегрузка оператора + для класса Date C++
C++ Перегрузка оператора + для структуры

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4944 / 4282 / 1431
Регистрация: 14.04.2014
Сообщений: 16,807
21.06.2016, 13:39     Перегрузка оператора * и / для строки #2
Новый объект возвращаешь.
C++
1
MyString operator * (MyString& str2)
Цитата Сообщение от sergentiy Посмотреть сообщение
Наприклад
Что за выражение?
sergentiy
0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 44
21.06.2016, 15:04  [ТС]     Перегрузка оператора * и / для строки #3
например

Добавлено через 57 минут
можно ли что-то подобное сделать через string? Сравнить две строки, и в если символы совпадают - записать в новую строку. Может есть какие-то готовые функции?
nmcf
4944 / 4282 / 1431
Регистрация: 14.04.2014
Сообщений: 16,807
21.06.2016, 15:26     Перегрузка оператора * и / для строки #4
Ну какой пример? Возьми свой и добавь создание нового объекта MyString и заполнение его нужными символами, и потом возврат.
sergentiy
0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 44
21.06.2016, 17:00  [ТС]     Перегрузка оператора * и / для строки #5
примерно что-то такое, но не такое... я хоть в правильном направлении?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
MyString operator * (MyString& str2)
    {
        for (char i = 0; i < str.length; i++)
        {
            for (char j = 0; j < str2.str.length; j++)
            {
                if (this->str.length[i] == str2.str.length[j])
                {
                    return MyString(this->str.length[i]);
                }
            }
        }
    }
Krock21rus
74 / 74 / 19
Регистрация: 18.11.2013
Сообщений: 372
Завершенные тесты: 2
21.06.2016, 18:02     Перегрузка оператора * и / для строки #6
Цитата Сообщение от sergentiy Посмотреть сообщение
результатом пересечения строк "Microsoft" и "Windows" будет строка "ioso"
сомневаюсь

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

Добавлено через 4 минуты
надо делать оптимальные алгоритмы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
friend MyString operator*(const MyString &s1, const MyString &s2)
{
 bool used[256];
 for(int i=0;i<256;i++) used[i] = false;
 for(int i=0;i<s2.size();i++)
  used[s2[i]] = true;
 MyString ans;
 for(int i=0;i<s1.size();i++)
  if(used[s1[i]])
   ans.push_back(s1[i]);
 return ans;
}
для 2ой задачи остаётся поменять
C++
1
if(used[s1[i]])
на
C++
1
if(!used[s1[i]])
Добавлено через 1 минуту
все методы подразумевают, что MyString == string
Yandex
Объявления
21.06.2016, 18:02     Перегрузка оператора * и / для строки
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru