0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 43
1

Совмещение текстов

04.03.2012, 19:31. Показов 912. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня есть класс строк и класс текст.
надо 1 текст сложить с другим( в программе уже 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
#include <iostream>
#include <string>
using namespace std;
 
class Row {
    char *str;
 
public:
    Row();
    Row( const Row& s); 
    Row(const string);
    ~Row();
    const char* GetRow ();
 
Row& operator +(const Row& s); 
 
    void get();
    void put();
    void putchar(int, char);
    void delchar(int);
    void clearstr();
    char array[256];
};
 
/*Конструктор по умолчанию*/
Row::Row() 
{str = new char[80];}
 
 
/* Деструктор */
Row::~Row(){
if(str!=NULL)
delete[] str;
str=NULL;
}
 
/*конструктор с параметрами*/
Row::Row(const string a) {
    this->str = new char[a.length()];
    for (int i = 0; i < a.length(); i++)
        str[i] = a[i];
    for (int j = a.length(); j < 80; j++) 
        str[j] = '\0';}
 
/*конструктор копирования*/
Row::Row(const Row &str){ 
this->str = new char[80];
    for(int i = 0; i < 80; i++) {
        this ->str[i] = str.str[i];}
}
 
void Row::get() {
    cout << "\t";
    gets(str);
}
 
void Row::put() {
    puts(str);
}
 
 
void Row::putchar(int i, char z) {
    for(int j = 78; j > i-2; j--) {
        str[j+1] = str[j];
    }
    str[i-1] = z;
}
 
 
void Row::delchar(int i) {
    for(int j = i - 1; j < 80; j++) {
        str[j] = str[j+1];
    }
}
 
 
void Row::clearstr() {
    for (int i = 0; i < 80; i++) {
        str[i] = '\0';
    }
}
 
Row& Row::operator +(const Row& s)
{
 
 
}
вот класс текст
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
using namespace std;
 
class Text {
     Row *text;
     int nums;
public:
     Text();
     Text(int);
     void add(const Row&);
     void print();
     void delstring(int);
};
 
 
/*конструктор по умолчанию*/
Text::Text() {
this->  text = new Row[1];
    nums = 0;
}
 
 
/*конструктор с параметрами */
Text::Text(int stramount) {
this ->text = new Row[stramount];
    nums = 0;
}
 
 
void Text::add(const Row& string) {
    text[nums] = string;
    nums++;
}
 
 
void Text::print() {
    for(int i = 0; i < nums; i++) {
        cout << "\t";
        text[i].put();
    }
}
 
 
void Text::delstring(int n) {
    for(int i = n - 1; i < nums - 1; i++) {
        text[i] = text[i+1];
    }
    text[nums - 1].~Row();
    nums--;
}
и вот функция мейн
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
#include <iostream>
#include <cstring>
#include <cstdio>
#include "strings.h"
#include "text.h"
 
using namespace std;
 
int main() {
    Text t1(3);
    Row str1, str2, str3,str4;
    setlocale(LC_CTYPE,"Russian");
    cout << "Введiть текст ";
    str1.get();
    t1.add(str1);
    str2.get();
    t1.add(str2);
    str3.get();
    t1.add(str3);
    cout << "Текст 1: "<<endl;;
    t1.print();
    
    /*вставка символа в рядок*/
    str1.putchar(5, 'D');
    cout << "Текст 2 \n: ";
    t1.print();
 
    /*видалення символа з рядка*/
    str1.delchar(5);
    cout << "Текст 3: \n "<<endl;
    t1.print();
 
    /*видалення рядка*/
    //t1.delstring(2);
    //cout << "Text 4: \n";
    //t1.print();
 
    /*очищення рядка*/
    str2.clearstr();
    cout << "Tекст 4 \n: "<<endl;
    t1.print();
 
cin.get();
    cin.get();
    return 0;
}
Ребята код работает, только надо написать 1 функцию по перегрузке операции! Буду очень благодарная.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2012, 19:31
Ответы с готовыми решениями:

Совмещение union и class
class A { public: A(){} }; class B { public: B(){}

Совмещение DAO и DataGrid
Не получаеться совместить DAO и DataGrid .... Возникает недопустимая операция ( Фрагмент кода : ...

Совмещение стека с <vector>
дан Хедер: #include &lt;vector&gt; class iStack { public: iStack( int capacity ) : _stack(...

Совмещение строк, удаление файла.
нужно объединить 2 строки,содержащие путь к директории и имя файла , затем по результату...

3
15 / 15 / 6
Регистрация: 21.07.2011
Сообщений: 89
04.03.2012, 19:55 2
При наличии конструктора
C++
1
Row(const string);
можно так:
C++
1
2
3
4
5
6
Row Row::operator+(const Row& r)
{
    string s(str);
    s += r.str;
    return Row(s);
}
Только operator+ должен возвращать объект, а не ссылку на него (в отличие от += или =).
Кроме того у вас в классе Row объявлен
C++
1
char array[256];
который нигде больше не встречается.
1
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 43
04.03.2012, 21:18  [ТС] 3
спасибо сейчас попробую!
0
15 / 15 / 6
Регистрация: 21.07.2011
Сообщений: 89
04.03.2012, 22:08 4
Не получится. Ошибок у вас очень много
Ваш класс Row я бы переписал как-то так:
А класс Text пробуйте исправить сами.
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
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
 
class Row 
{
private:
    enum {SIZE = 80};
    char* str;
public:
    Row();
    Row(const Row& r); 
    Row(const string s);
    Row& operator=(const Row& r);
    ~Row() {delete [] str;}
    void get();
    void put();
    void delchar(int);
    void clearstr();
    Row operator+(const Row& r); 
};
Row::Row() 
{
    str = new char[SIZE+1];
    str[0] = '\0';
}
Row::Row(const Row& r)
{ 
    str = new char[SIZE+1];
    strcpy(str,r.str);
}
Row::Row(const string s)
{
    str = new char[SIZE+1];
    strcpy(str, s.c_str());
}
Row& Row::operator=(const Row& r)
{
    strcpy(str,r.str);
    return *this;
}
void Row::get() 
{
    fgets(str, SIZE+1, stdin);
    int i = strlen(str)-1;
    if (str[i] == '\n')
        str[i] = '\0';
}
void Row::put() 
{
    if (str[0])
        puts(str);
    else
        puts("Row is empty");
}
void Row::delchar(int n) 
{
    if ( 0 < n && n <= SIZE )
        for(int i = n - 1; i < SIZE; ++i) 
            str[i] = str[i+1];
}
void Row::clearstr() 
{
    str[0] = '\0';
}
Row Row::operator+(const Row& r)
{
    string s(str);
    s += " ";
    s += r.str;
    return Row(s);
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2012, 22:08
Помогаю со студенческими работами здесь

совмещение ооп и фп в одной программе
Суть такая. нужно не прибегая к классам сделать функции с одним названием но разным исполнением, в...

небольшой вопрос про совмещение строк
всем приятного времени суток))сразу извиняюсь если тема не в том разделе:pardon: вот назрела...

Совмещение имен структурного типа и других программных конструкций
Почему разрешено написать так: struct stat{/*...*/}; int stat(char* name, struct stat* buf);

Генератор случайных текстов
Здравствуйте! Помогите пожалуйста выполнить лабу. Надо создать в C++ генератор случайных чисел, а...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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