Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 28.06.2022
Сообщений: 19
1

Поправить код

30.06.2022, 14:10. Показов 468. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть готовый код, который писал не я. Там создается контейнер массив из чисел и строк. Но почему то когда вводится строка, то в массив записывается строка + "1 " (например ввели "a", а элементом массива стало "1 a"). Мне надо подправить так, чтобы не было этого "1 ", а только сама строка. У самого не получается, так как плохо разбираюсь в теме.
Код:
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
#include <locale.h>
#include <string.h>
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
template <class type> // объявление шаблона класса
class arrayob // класс Динамический массив
{
    type **contents; // массив указателей на объекты типа type
    int size; // максимальное количество объектов в массиве
    int n; // реальное количество объектов в массиве
public:
    arrayob(int number)
    {
        contents = new type *[size = number];
    }
    ~arrayob();
    void add(type *p)
    {
        if (n == size)cerr << "Выход за пределы";
        else { contents[n] = p; n++; }
    }
    void del(int pos) {
        if (n <= pos)
            return;
        for (int i = pos; i < n - 1; ++i) {
            contents[i] = contents[i + 1];
        }
        --n;
    }
    type & operator [] (int x) // итератор массива объектов
    {
        if ((x < 0) || (x >= size))
        {
            cerr << "Ошибочный индекс " << x << endl; x = 0;
        }
        return *contents[x];
    }
    int sizeofmas() { return n; } // реальный размер массива
};
template <class type> arrayob<type>::~arrayob()
{
    for (int i = 0; i < n; i++) delete contents[i];
    delete[]contents;
}
class TNum // класс Число
{
public: int num;
        virtual void Print(void) { cout << num << " "; }
        TNum() { cout << "Введите число" << endl; cin >> num; }
        TNum(int n) :num(n) {}
        virtual ~TNum(void) {}
};
class TStr :public TNum // класс Строка
{
public: char *st;
        virtual void Print(void) { TNum::Print(); cout << st << " "; }
        TStr(); // конструктор по умолчанию
        TStr(char *s) :TNum(strlen(s))// конструктор с параметрами
        {
            st = new char[num + 1]; strcpy(st, s);
            st[num] = '\0';
        }
            virtual ~TStr(void) { delete[] st; }
};
TStr::TStr() :TNum(40)
{
    cout << "введите строку " << endl;
    st = new char[num + 1]; cin >> st;
    num = strlen(st); st[num + 1] = '\0';
}
 
arrayob<TNum> ob_a(5); //массив из 5 указателей на объекты
 
int main()
{
    setlocale(0, "russian");
    int i;
    for (i = 0; i < 5; i++)
        if (i / 2 * 2 == i)
            ob_a.add(new TNum); // добавить Число
        else ob_a.add(new TStr); // добавить Строку
    cout << "Содержимое контейнера " << "\n";
    for (i = 0; i < ob_a.sizeofmas(); i++)
        ob_a[i].Print();
    cout << "\n";
    ob_a.del(0);
    cout << "Содержимое контейнера " << "\n";
    for (i = 0; i < ob_a.sizeofmas(); i++)
        ob_a[i].Print();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2022, 14:10
Ответы с готовыми решениями:

Поправить код
Задача: Дан массив из 11 действительных чисел и натуральное число k. Вычислить среднее...

Поправить код C++
#include &lt;grx20.h&gt; #include &lt;grxkeys.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;math.h&gt;...

Поправить код
В этом коде нужно дописать, что пременная step&lt;=0 иначе errror. Как это сделать ? Вот код. ...

Необходимо поправить код
в общем программа решает СЛАУ методом Жордана-Гаусса с выбором ведущего элемента, проблема в том,...

7
126 / 94 / 34
Регистрация: 24.06.2022
Сообщений: 253
30.06.2022, 14:38 2
Цитата Сообщение от Roman12346 Посмотреть сообщение
Мне надо подправить так, чтобы не было этого "1 ", а только сама строка.
там не в строку записывается, а вызывается метод Print базового класса TNum.

C++
1
 virtual void Print(void) { TNum::Print(); cout << st << " "; }
Добавлено через 40 секунд
просто закомментируйте вызов метода TNum::Print()

C++
1
2
3
4
5
  virtual void Print(void) 
        {
          // TNum::Print(); 
            cout << st << " ";
        }
0
2832 / 2337 / 707
Регистрация: 29.06.2020
Сообщений: 8,643
30.06.2022, 14:39 3
Хм, почему класс Строка наследуется от класса Число ?
0
js_advent
30.06.2022, 14:39
  #4

Не по теме:

SmallEvil, тут лучше не вникать , а то с нуля писать придется )

0
2832 / 2337 / 707
Регистрация: 29.06.2020
Сообщений: 8,643
30.06.2022, 14:55 5
Цитата Сообщение от js_advent Посмотреть сообщение
SmallEvil, тут лучше не вникать , а то с нуля писать придется )
Та не, просто создать общий интерфейс/[абстрактный класс] для Числа и Строки.
Например
C++
1
2
3
4
5
6
7
8
9
class TData(){
public:
   virtual void Print()=0;
   virtual ~TData(){};
}
class TNum : public TData; 
class TStr   : public TData; 
 
arrayob<TData> ob_a(5);
Все.
1
0 / 0 / 0
Регистрация: 28.06.2022
Сообщений: 19
30.06.2022, 15:00  [ТС] 6
SmallEvil,
Цитата Сообщение от SmallEvil Посмотреть сообщение
Хм, почему класс Строка наследуется от класса Число ?
Я же говорю, эт не я писал, хз, почему так сделали
0
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,588
30.06.2022, 15:03 7
Что у вас за задание? Сто-двести строк проще написать снуля, чем разбирать чужой код еще и подобного качества.
0
2832 / 2337 / 707
Регистрация: 29.06.2020
Сообщений: 8,643
30.06.2022, 15:13 8
Цитата Сообщение от Roman12346 Посмотреть сообщение
Я же говорю, эт не я писал, хз, почему так сделали
Да услышал я и с первого раза.
И показал как это легко исправить.
Тогда и в выводе на экран не будете путаться, и дальше продвигать код можно будет, наверное

Не по теме:

lemegeton, - Фунтик, ты со мной согласен ?

SmallEvil, - Конечно да! Конечно да! Конечно да!



Добавлено через 3 минуты
Цитата Сообщение от Roman12346 Посмотреть сообщение
Хм, почему класс Строка наследуется от класса Число ?
Я же говорю, эт не я писал, хз, почему так сделали
Ну может это был класс, нумерованная строка. Как в листингах программ.
Номер строки, сама строка. Но как бы и название нужно соответственное, и число выводить по умолчанию тоже такое себе решение.
Вообщем это уже оффтопчик...

Добавлено через 1 минуту
Цитата Сообщение от Roman12346 Посмотреть сообщение
TStr::TStr() :TNum(40)
Это фообще от фонаря,
0
30.06.2022, 15:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2022, 15:13
Помогаю со студенческими работами здесь

Поправить код программы
Здравствуйте, уважаемые программисты. Прошу у вас помощи с программой: Методические указания:...

Поправить код программы
Здравствуйте, уважаемые программисты. Очень нужна ваша помощь - не хочет работать код. Очень...

Нужно поправить код
Задача состоит в том,что в одну ячейку массива можно вписать сколько угодно единиц,но только два...

Поправить код программы
Добрый день, уважаемые программисты. Нашёл нужный код для своего задания, а он не работает. Пытался...

Поправить код (Функции)
Сама задача: Даны два массива целых чисел размеров n и m и целые числа k и t. Если в первом...

Нужно поправить код
Вобщем есть файл txt с парами областей вот пример кусочек Volynska Rivnenska Volynska Lvivska ...

Поправить немного код
#include &lt;string.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; using namespace...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru