Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
чем гуще лес тем
 Аватар для anton_13
0 / 0 / 0
Регистрация: 19.01.2024
Сообщений: 71

Исправить метод класса

21.09.2024, 13:19. Показов 3440. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Исправить метод compareAndReturnDifferences так, чтобы он корректно возвращал строку несовпадающих символов строк, если такие символы есть.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
 
class DynamicString
{
private:
    char* str;
    static int instanceCount;
 
public:
    DynamicString() : str(nullptr)
    {
        str = new char[1];
        str[0] = '\0';
        instanceCount++;
        std::cout << "Конструктор по умолчанию вызван для: " << this << " с адресом str: " << (void*)str << std::endl;
    }
 
    DynamicString(const char* input)
    {
        if (input == nullptr)
        {
            throw std::invalid_argument("Строка ввода не может быть нулевой");
        }
        str = new char[strlen(input) + 1];
        strcpy(str, input);
        instanceCount++;
        std::cout << "Конструктор с параметром вызван для: " << this << " с адресом str: " << (void*)str << std::endl;
    }
 
    // Деструктор
    ~DynamicString()
    {
        delete[] str;
        instanceCount--;
        std::cout << "Деструктор вызван для: " << this << std::endl;
    }
 
    int length() const
    {
        return strlen(str);
    }
 
    // Метод для получения строки
    const char* getString() const
    {
        return str;
    }
 
    // Метод для установки новой строки
    void setString(const char* newStr)
    {
        delete[] str;
        str = new char[strlen(newStr) + 1];
        strcpy(str, newStr);
    }
 
    // Метод для визуализации объекта (вывод адресов)
    void visualize() const
    {
        std::cout << "Адрес объекта: " << this << std::endl;
        std::cout << "Адрес str: " << (void*)str << std::endl;
        std::cout << "Содержимое: " << str << std::endl;
    }
 
    // Метод для вывода длины строки
    void printLength() const
    {
        std::cout << "Длина строки: " << length() << std::endl;
    }
 
    // Метод для возвращения строки несовпадающих символов
    std::string compareAndReturnDifferences(const DynamicString& other) const
    {
        const char* s1 = this->getString(); // Используем this для доступа к данным текущего объекта
        const char* s2 = other.getString();
        std::string differences;
 
        int len1 = this->length();
        int len2 = other.length();
        int maxLength = std::max(len1, len2);
 
        for (int i = 0; i < maxLength; ++i)
        {
            if (i >= len1 || i >= len2 || s1[i] != s2[i])
            {
                differences += (i < len1 ? s1[i] : ' ') + std::string(" vs ") + (i < len2 ? s2[i] : ' ') + "\n";
            }
        }
 
        return differences;
    }
 
    // Статический метод для получения количества экземпляров
    static int getInstanceCount()
    {
        return instanceCount;
    }
};
 
int DynamicString::instanceCount = 0;
 
int main() {
    setlocale(LC_ALL, "RUS");
 
    DynamicString* dynamicStr1 = new DynamicString("Hello, World!");
 
    DynamicString staticStr("Hello, Universe!");
 
    // Визуализация объектов
    dynamicStr1->visualize();
    staticStr.visualize();
 
    // Вывод количества экземпляров
    std::cout << "Количество экземпляров: " << DynamicString::getInstanceCount() << std::endl;
 
    // Вывод длины строки
    dynamicStr1->printLength();
    staticStr.printLength();
 
    // Сравнение строк и вывод несовпадающих символов
    std::string diff = dynamicStr1->compareAndReturnDifferences(staticStr);
    if (!diff.empty())
    {
        std::cout << "Различия:\n" << diff;
    }
    else
    {
        std::cout << "Строки идентичны\n";
    }
 
    delete dynamicStr1;
 
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.09.2024, 13:19
Ответы с готовыми решениями:

Как передать в метод класса Menu указатель на метод дочернего класса?
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: setCallback(*********); //...

В C++ метод производного класса всегда переопределяет метод базового класса?
#pragma once #include &lt;iostream&gt; using namespace std; class Fish { public: virtual ~Fish() = default;

Как описать метод класса? Как двумя способами описать инлайнируемый метод класса? Что такое this?
Раздел 1. Строки: нужен фрагмент кода. Обязательно используйте функции для работы со строками. Как найти адрес последнего символа строки?...

2
 Аватар для Fabien159
43 / 30 / 13
Регистрация: 20.12.2017
Сообщений: 147
19.10.2024, 17:53
Лучший ответ Сообщение было отмечено anton_13 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
 
class DynamicString
{
private:
    char* str;
    static int instanceCount;
 
public:
    DynamicString() : str(nullptr)
    {
        str = new char[1];
        str[0] = '\0';
        instanceCount++;
        std::cout << "Конструктор по умолчанию вызван для: " << this << " с адресом str: " << (void*)str << std::endl;
    }
 
    DynamicString(const char* input)
    {
        if (input == nullptr)
        {
            throw std::invalid_argument("Строка ввода не может быть нулевой");
        }
        str = new char[strlen(input) + 1];
        strcpy(str, input);
        instanceCount++;
        std::cout << "Конструктор с параметром вызван для: " << this << " с адресом str: " << (void*)str << std::endl;
    }
 
    // Деструктор
    ~DynamicString()
    {
        delete[] str;
        instanceCount--;
        std::cout << "Деструктор вызван для: " << this << std::endl;
    }
 
    int length() const
    {
        return strlen(str);
    }
 
    // Метод для получения строки
    const char* getString() const
    {
        return str;
    }
 
    // Метод для установки новой строки
    void setString(const char* newStr)
    {
        delete[] str;
        str = new char[strlen(newStr) + 1];
        strcpy(str, newStr);
    }
 
    // Метод для визуализации объекта (вывод адресов)
    void visualize() const
    {
        std::cout << "Адрес объекта: " << this << std::endl;
        std::cout << "Адрес str: " << (void*)str << std::endl;
        std::cout << "Содержимое: " << str << std::endl;
    }
 
    // Метод для вывода длины строки
    void printLength() const
    {
        std::cout << "Длина строки: " << length() << std::endl;
    }
 
    // Метод для возвращения строки несовпадающих символов
    std::string compareAndReturnDifferences(const DynamicString& other) const
    {
        const char* s1 = this->getString();
        const char* s2 = other.getString();
        std::string differences;
 
        int len1 = this->length();
        int len2 = other.length();
        int minLength = std::min(len1, len2); // Находим длину самой короткой строки
 
        // Проходим по обеим строкам и сравниваем символы
        for (int i = 0; i < minLength; ++i)
        {
            if (s1[i] != s2[i]) // Если символы отличаются, добавляем их в строку различий
            {
                differences += "Позиция " + std::to_string(i + 1) + ": '" + s1[i] + "' vs '" + s2[i] + "'\n";
            }
        }
 
        // Если одна строка длиннее другой, добавляем оставшиеся символы длинной строки
        if (len1 > len2)
        {
            differences += "Оставшиеся символы в первой строке: '";
            differences.append(s1 + minLength);
            differences += "'\n";
        }
        else if (len2 > len1)
        {
            differences += "Оставшиеся символы во второй строке: '";
            differences.append(s2 + minLength);
            differences += "'\n";
        }
 
        return differences;
    }
 
    // Статический метод для получения количества экземпляров
    static int getInstanceCount()
    {
        return instanceCount;
    }
};
 
int DynamicString::instanceCount = 0;
 
int main() {
    setlocale(LC_ALL, "RUS");
 
    DynamicString* dynamicStr1 = new DynamicString("Hello, World!");
    DynamicString staticStr("Hello, Universe!");
 
    // Визуализация объектов
    dynamicStr1->visualize();
    staticStr.visualize();
 
    // Вывод количества экземпляров
    std::cout << "Количество экземпляров: " << DynamicString::getInstanceCount() << std::endl;
 
    // Вывод длины строки
    dynamicStr1->printLength();
    staticStr.printLength();
 
    // Сравнение строк и вывод несовпадающих символов
    std::string diff = dynamicStr1->compareAndReturnDifferences(staticStr);
    if (!diff.empty())
    {
        std::cout << "Различия:\n" << diff;
    }
    else
    {
        std::cout << "Строки идентичны\n";
    }
 
    delete dynamicStr1;
 
    return 0;
}
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,238
19.10.2024, 21:29
Цитата Сообщение от anton_13 Посмотреть сообщение
Исправить метод compareAndReturnDifferences так, чтобы он корректно возвращал строку несовпадающих символов строк, если такие символы есть.
Так он и так уже все прекрасно возвращает. Что "исправить"? Зачем? Опишите подробно проблему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.10.2024, 21:29
Помогаю со студенческими работами здесь

Создать для класса виртуальный метод, возвращающий уникальный идентификатор класса
В курсаче по ООП сказано создать для класса виртуальный метод,возвращающий уникальный идентификатор класса. Вопрос в том, что это такое?

Инициализация члена класса тип ссылка на метод этого класса
Добрый день. Подскажите пожалуйста, как правильно инициализировать? Работает: #include &lt;iostream&gt; typedef void(*FuncPtr)(); ...

Как отправить объект одного класса в метод другого класса
Начал изучать классы в c++ и в качестве практики решил написать программу которая упрощено симулирует работу завода: #include...

Может ли метод родительского класса обратиться к полю дочернего класса
Может ли метод родительского класса обратиться к полю дочернего класса?

Как определить метод класса с параметром-объектом другого класса
Здравствуйте! Есть два класса: Space и Vector. Я пытаюсь создать метод класса Space, с параметром-объектом класса Vector. Выдает ошибку:...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru