Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ C++, перегрузка оператора [] для шаблонного класса main() - создаю переменную типа int, тот же, что и шаблонный класс. в первом случае оператор temp; не работает и выводит не существует подходящей функции преобразования из Array<int> закомментированная же строчка работает - почему??? уже час сижу, смотрел в других примерах, перегружают точно также классы и всё работает замечательно, что у меня не так? #include<iostream>... https://www.cyberforum.ru/ cpp-beginners/ thread3132220.html При заходе в функцию, значение переменной arrl меняется C++
#include <iostream> #include <iomanip> #include <cmath> using namespace std; void arri(int* arr, int arrl, int n = 100, int pos = 0) { int *arr2 = new int, i, y = 0; for (i = 0; i < arrl; i++) { if (i != pos && !y) arr2 = arr; else if (i != pos && y) arr2 = arr;
C++ Зациклился цикл https://www.cyberforum.ru/ cpp-beginners/ thread3132179.html
#include <bits/stdc++.h> using namespace std; int main() { int n, k, a; pair<int, int> p; vector<pair<int, int>> s; cin >> n >> k;
C++ Зациклился цикл #include <bits/stdc++.h> using namespace std; int main() { int n, k, a; pair<int, int> p; vector<pair<int, int>> s; cin >> n >> k; https://www.cyberforum.ru/ cpp-beginners/ thread3132178.html
C++ Добавление элеметов в vector<pair<int,int>>
#include <bits/stdc++.h> using namespace std; int main() { int n, k; vector<pair<int, int>> s; cin >> n >> k; for (int i=0; i<=k;i++)
C++ Проверка на списывание https://www.cyberforum.ru/ cpp-beginners/ thread3132143.html
УСЛОВИЕ В МШП ввели обучение на новом языке X++, код на котором представляет собой последовательность маленьких латинских букв. Вместе с введением нового языка появилась потребность выявлять случаи списывания. У преподавателя возникла гипотеза, что код Ноуфана, преставляющий из себя строку s, является плагиатом кода Феофана, который соответствует строке t. У Ноуфана есть одна особенность - он...
C++ Вывести таблицу значений интервально заданной функции Разработать консольные приложения на языке С++, решающие следующую задачу: на интервале с шагом dx вычислить значения кусочно-заданной функции F(x). Значения a, b, dx вводятся пользователем. При выводе результатов провести выравнивание при помощи манипуляторов. https://www.cyberforum.ru/ cpp-beginners/ thread3132134.html C++ Нетривиальные разбиения
Условие Разбиение числа n определим как набор целых положительных различных a1, . . . , ak, что a1 + ... + ak = n; a1 < a2 < ... < ak. Разбиение является нетривиальным, если для любых трех подряд идущих слагаемых среднее из них не равно среднему арифметическому крайних. Более формально, для всех i от 1 до k − 2 выполнено неравенство ai+1 6= (ai + ai+2)/2. Ваша задача - по данному числу n...
C++ Вывести набор из точек образующий разбиение заданного отрезка Дано целое число N (> 2) и две вещественные точки на числовой оси: R, S (R > S). Отрезок разбит на равные отрезки длины F с концами в N точках вида R, R + F, R + 2F, R + 3F, ..., S. Вывести значение F и набор из N точек, образующий разбиение отрезка .  https://www.cyberforum.ru/ cpp-beginners/ thread3132084.html C++ Вычислить выражение https://www.cyberforum.ru/ cpp-beginners/ thread3132081.html
Дано число n. Вычислить выражение sin(n)+sin(n-1)+…+sin(2)+sin(1)
C++ Использовать паттерн наблюдателя
Добрый день, Приемлемо использовать в данной реализации паттерн наблюдателя? Чтобы связывать свойства между собой и оповещать наблюдателей о изменении. Классическая реализация выделяет наблюдателя в отдельный класс и связывает его с субъектом. Могу ли я реализовать наблюдателя и субъекта в одном классе как на примере сеттера ниже? template<typename T> class Setter { public: ...
C++ Обработка ошибок https://www.cyberforum.ru/ cpp-beginners/ thread3132055.html
Всем привет! Я пишу СУБД на C++ С её использованием работа с БД представляется в виде кода: InSomnia::open_db("my_db") .open_table("User") .add_record( {
0 / 0 / 0
Регистрация: 25.05.2023
Сообщений: 7
05.10.2023, 08:02  [ТС] 0

Проблемы с полем класса в виде массива char - C++ - Ответ 17059779

05.10.2023, 08:02. Показов 260. Ответов 5
Метки (Все метки)

Ответ

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
#include <string>
#include "algorithm"
#include "exception"
 
class Array {
protected:
    char* array;
    unsigned int length;
    static unsigned int limit;
public:
    class IndexError : public std::exception {
        std::string m_msg;
    public:
        IndexError(unsigned int i);
        const char* what() const noexcept override;
    };
    Array() : Array(0) {};
    Array(unsigned int len, char val);
    Array(unsigned int len) : Array(len, '0') {};
    Array& operator=(const Array& other);
    Array(const Array& other);
    char operator[](unsigned int i) const;
    char& operator[](unsigned int i);
    virtual Array plus(const Array& other) const;
};
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
#include "Array.h"
 
unsigned int Array::limit = 100;
 
Array::Array(unsigned int len, char val) {
    if (len > limit) throw;
    array = new char[len];
    length = len;
    for (int i = 0; i < len; i++) {
        array[i] = val;
    }
}
 
 
char Array::operator[](unsigned int i) const {
    if (i >= length) throw IndexError(i);
    return array[i];
}
 
char& Array::operator[](unsigned int i) {
    if (i >= length) throw IndexError(i);
    return array[i];
}
 
Array Array::plus(const Array& other) const {
    return Array(0, 0);
}
 
Array& Array::operator=(const Array& other) {
    length = other.length;
    array = new char[length];
    for (unsigned int i = 0; i < length; i++) {
        array[i] = other[i];
    }
    return *this;
}
 
Array::Array(const Array& other) {
    length = other.length;
 
    array = new char[length];
 
    for (unsigned int i = 0; i < length; i++)
    {
        array[i] = other.array[i];
    }
}
 
Array::IndexError::IndexError(unsigned int i) {
    m_msg.assign("ERROR: Wrong index " + std::to_string(i));
}
 
const char* Array::IndexError::what() const noexcept {
    return m_msg.c_str();
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "Array.h"
 
class String : public Array {
public:
    String() : Array(100, '0') {};
    String(unsigned int len) : Array(len, '0') {};
    String(char* source_string);
    String(const String& str);
    const char* c_str() const;
    String& operator=(const String&);
    String plus(const String&) const;
    int search_substring(const String&) const;
    String& delete_substring(const String&);
    String& insert_substring(const String&, unsigned int);
    unsigned int get_length() const;
    ~String();
    friend std::ostream& operator<<(std::ostream& out, const String& str);
    friend std::istream& operator>>(std::istream& in, String& str);
};
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include "String.h"
#include <iostream>
#include "cstring"
#include <cstdio>
#include <string>
#include <algorithm>
 
String::String(char* source_string) :
    Array(strlen(source_string))
{
    auto len = (unsigned int)(strlen(source_string));
    for (unsigned int i = 0; i < len; i++) {
        array[i] = source_string[i];
    }
}
 
String::String(const String& str)
{
    length = str.length;
    array = new char[length + 1];
    for (unsigned int i = 0; i < length; i++) {
        array[i] = str.array[i];
    }
    array[length] = '\0';
}
 
String String::plus(const String& other) const {
    String tmp(length + other.length);
    for (unsigned int i = 0; i < length; i++) {
        tmp[i] = array[i];
    }
    for (unsigned int i = length; i < length + other.length; i++) {
        tmp[i] = other[i];
    }
    return tmp;
}
 
String& String::operator=(const String& obj) {
    if (this == &obj) return *this;
 
    unsigned int length = get_length();
    unsigned int obj_length = obj.get_length();
 
    if (length != obj_length)
    {
        delete[] array;
        length = obj_length;
        array = new char[obj_length];
    }
 
    for (unsigned int i = 0; i < obj_length; i++)
    {
        array[i] = obj.array[i];
    }
 
    return *this;
}
 
int String::search_substring(const String& sub) const {
    int pos = -1;
    if (length < sub.length) return pos;
    for (unsigned int i = 0; i <= length - sub.length; ++i) {
        bool found = true;
        for (unsigned int j = i, k = 0; j < i + sub.length; ++j, ++k) {
            std::cout << array[j] << " " << sub.array[k];
            if (array[j] != sub.array[k]) {
                std::cout << "!=" << std::endl;
                found = false;
                break;
            }
            std::cout << "==" << std::endl;
        }
        if (found) {
            pos = i;
            return pos;
        }
    }
    return pos;
}
 
String& String::delete_substring(const String& sub) {
    int del_pos = search_substring(sub);
    if (del_pos == -1) {
        return *this;
    }
 
    char* tmp = new char[length - sub.length];
 
    if (length - sub.length == 0)
    {
        delete[] array;
        length = 0;
        return *this;
    }
 
    for (unsigned int i = 1, j = 1; i < length; i++, j++)
    {
        if (i == del_pos) i += (sub.length);
        tmp[j] = array[i];
    }
 
    delete[] array;
    array = tmp;
    length = length - sub.length;
    return *this;
}
 
String& String::insert_substring(const String& sub, unsigned int n) {
    try {
        if (n >= length) throw;
        String tmp(length + sub.length);
        for (unsigned int i = 0; i < n; i++) {
            tmp[i] = array[i];
        }
        for (unsigned int i = n; i < n + sub.length; i++) {
            tmp[i] = sub[i];
        }
        for (unsigned int i = n; i < length; i++) {
            tmp[i + sub.length] = array[i];
        }
        *this = tmp;
        return *this;
    }
    catch (const char* e) {
        std::cout << e << '\n';
    }
    return *this;
}
 
unsigned int String::get_length() const {
    return length;
}
 
String::~String() {
    delete[] array;
}
 
const char* String::c_str() const {
    return array;
}
 
std::ostream& operator<<(std::ostream& out, const String& str) {
    for (int i = 0; i < str.length; i++) {
        std::cout << (char)str.array[i];
    }
    return out;
}
 
std::istream& operator>>(std::istream& in, String& str) {
    std::string tmp;
    in >> tmp;
 
 
    auto len = std::min((unsigned int)(tmp.length()), Array::limit);
    std::cout << len << std::endl;
    delete[] str.array;
    str.array = new char[len+1];
 
    for (int i = 0; i < len; i++) {
        str.array[i] = tmp[i];
    }
    str.array[len] = '\0';
    
    str.length = len;
    std::cout << str.array << " " << str.length << std::endl;
    return in;
}


Вернуться к обсуждению:
Проблемы с полем класса в виде массива char C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2023, 08:02
Готовые ответы и решения:

Массив char является полем класса: как присвоить ему значения?
Товарищи, столкнулся с проблемой. Изначально пишу программу для перегрузки операторов +,- и пр. . В...

Надо записать дробь, грубо говоря, в виде char* fract = char numer + '/' + char denomen
Пытался сделать это strcat'ом, но ошибка в стиле :&quot;Эта функция сулит потерю данных&quot;. #define...

Указатели и классы: присвоение значения элементу массива, который является полем класса
Доброго времени суток, делал задание, где надо создать класс, полем которого будет массив...

Проблемы с динамической инициализацией char-массива
Почему вообще следующий код при h = 6 создает массив длинной этак в 20 символов? char *ret = new...

Задание индекса для доступа к элементу массива в виде char *
по сабжу: a = 2.3234; a = 2.345e12; Каким образом можно организовать такой доступ к...

5
05.10.2023, 08:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2023, 08:02
Помогаю со студенческими работами здесь

Создание объекта класса с полем являющимся объектом другого класса
Bill a; cin&gt;&gt;a;//тут я ввел с помощью перегруженного оператора ElementSpiska c; //поля у...

XmlJava. Сериализация класса с полем - массивом объектов другого класса
Есть 2 класса Студент и Академ.группа(с полем - массивом студентов). Необходимо выполнить...

Как получить доступ к полям класса, который в свою очередь является полем шаблонного класса?
В данном случае параметром шаблона функции является класс матрица, в arr находится сама матрица....

Сложение / Вычитание / Умножение чисел записанных в виде массива char символов
доброго времени суток. такой вопрос, как мне сделать выше перечилненные математичиские вычесления...

Что будет с полем динамического типа данных у класса, если я создам статический экземпляр этого класса?
нигде не могу найти ответ на свой вопрос

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru