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

Перегрузка оператора == для string - C++

Восстановить пароль Регистрация
 
lavengerl
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 77
24.10.2011, 02:19     Перегрузка оператора == для string #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
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
#include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
#include <stdlib.h>
using namespace std;
 
class TestContent
{
 
public:
    TestContent(char *){}; //конструктор
int x,y,res;
 
    void Init();
    void ReadFile();
    void Read();
    void testing();
//  int operator ==(string); 
 
    struct Task
    {
        char vopros[100];
        char a[30];
        char b[30];
        char c[30];
        char d[30];
        char e[30];
        int tru;
        int balls;
    };  //array[100];
    
    Task mas[3];
private:
//  char data[256]; 
};
 
void TestContent::Init()
{
    int a;
    cout<<"bajaete zapovnutu testu avtomatu4no?"<<endl<<"1-tak"<<endl<<"else-ni"<<endl;
    cin>>a;
    if (a==1) ReadFile();
    else Read();
    cout<<"bajaete proitu danui test?"<<endl<<"1-tak"<<endl<<"2-ni"<<endl;
    cin>>y;
    if (y==1)
    {
        system("cls");
        TestContent::testing();
    }
    else if (y==2)
    {
        cout<<"press enter to continious";
    }
    else cout<<"pomulka!"<<endl;
 
 
}
 
void TestContent::ReadFile()
{
    
    ifstream File1("1.txt");
        for(int i=0;i<3;i++)
        {
            //File1>>TestContent.mas[i].vopros>>obj.mas[i].a>>obj.mas[i].b>>obj.mas[i].c>>obj.mas[i].d>>obj.mas[i].e>>obj.mas[i].tru>>obj.mas[i].balls;
            //cout<<obj.mas[i].vopros<<obj.mas[i].a<<obj.mas[i].b<<obj.mas[i].c<<obj.mas[i].d<<obj.mas[i].e<<obj.mas[i].tru<<obj.mas[i].balls;
            File1>>TestContent::mas[i].vopros>>TestContent::mas[i].a>>TestContent::mas[i].b>>TestContent::mas[i].c>>TestContent::mas[i].d>>TestContent::mas[i].e>>TestContent::mas[i].tru>>TestContent::mas[i].balls;
            //cout<<"v:"<<TestContent::mas[i].vopros<<"\ta="<<TestContent::mas[i].a<<"\tb="<<TestContent::mas[i].b<<"\tc="<<TestContent::mas[i].c<<"\td="<<TestContent::mas[i].d<<"\te="<<TestContent::mas[i].e<<"\ttru="<<TestContent::mas[i].tru<<"\tballs="<<TestContent::mas[i].balls<<endl;
        }
}
 
void TestContent::Read()
{
/*int x;
cout<<"skilku biletiv bajaete vvestu?(1-3";
cin>>x;*/
for(int i=0;i<3;i++)
        {
            cout<<"bilet N"<<i+1<<endl;
            cout<<"vvedit putannia: "; cin>>TestContent::mas[i].vopros;
            cout<<"vvedit variantu vidpovidi:"<<endl;
            cout<<"a: ";cin>>TestContent::mas[i].a;
            cout<<"b: ";cin>>TestContent::mas[i].b;
            cout<<"c: ";cin>>TestContent::mas[i].c;
            cout<<"d: ";cin>>TestContent::mas[i].d;
            cout<<"e: ";cin>>TestContent::mas[i].e;
            cout<<"vvedit nomer pravulnoi vidpovidi: "; cin>>TestContent::mas[i].tru;
            cout<<"vvedit kilkist baliv za virny vidpovid:"; cin>>TestContent::mas[i].balls;
            cout<<endl;
        }
}
 
 
void TestContent::testing()
{
    int y;
    res=0;
        for (int i=0;i<3;i++)
        {
            cout<<"Putannia N"<<i+1<<endl;
            cout<<"putannia:"<<TestContent::mas[i].vopros<<endl<<"a="<<TestContent::mas[i].a<<endl<<"b="<<TestContent::mas[i].b<<endl<<"c="<<TestContent::mas[i].c<<endl<<"d="<<TestContent::mas[i].d<<endl<<"e="<<TestContent::mas[i].e<<endl<<"balls="<<TestContent::mas[i].balls<<endl;
            cin>>y;
            if (y==TestContent::mas[i].tru)
            {
                cout<<"virno!"<<endl;
                res=res+TestContent::mas[i].balls;
            }
            else cout<<"nevirno!"<<endl;
        }
    cout<<"resultat testy: "<<res<<endl;
}
 
 
/*TestContent::TestContent(char *str)
 
{ 
   strcpy(data, str); 
}
 
int TestContent::operator ==(string str)
{ 
   int i; 
   for (i = 0; data[i] == str.data[i]; i++) 
   if ((data[i] == NULL) && (str.data[i] == NULL)) return(1); // Равно
   return (0); //He равно 
}*/
 
int main()
{
    TestContent obj("werwew");
    TestContent obj2("sasddsa");
    TestContent obj3("werwew");
l1: cout<<"1-Proxodjennia testy"<<endl<<"2-Pedaryvannia testy"<<endl;
    cin>>obj.x;
    if (obj.x==1)
    {
            obj.ReadFile();
            obj.testing();
            getch();
    }
    else if (obj.x==2)
    {
            obj.Init();
            getch();
    }
    else 
        {
            cout<<"pomulka"<<endl;
        };
 
system("cls");
goto l1;
return 0;
}
прога делает все то что мне нужно н оосталось реализовать перегрузку оператора == для типа string. тоесть мне нужно будет сравнить обьекты
TestContent obj("werwew");
TestContent obj2("sasddsa");
TestContent obj3("werwew");
и если будут одинаковые то удалить повторяющийся.

Нашел в нете инфу.
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
#include <iostream.h>
 
#include <string.h>
 
class string
 
{ 
public: 
   string(char *); // конструктор 
   char * operator +(char *); 
   char * operator -(char); 
   int operator ==(string); 
   void show_string(void); 
private: 
   char data[256]; 
};
 
string::string(char *str)
 
{ 
   strcpy(data, str); 
}
 
int string::operator ==(string str)
 
{ 
   int i; 
   for (i = 0; data[i] == str.data[i]; i++) 
   if ((data[i] == NULL) && (str.data[i] == NULL)) return(1); // Равно
   return (0); //He равно 
}
 
void string::show_string(void)
 
{ 
   cout << data << endl; 
}
 
void main(void)
 
{ 
   string title( "Учимся программировать на C++"); 
   string lesson("Перегрузка операторов"); 
   string str( "Учимся программировать на C++"); 
   if (title == lesson) cout << "title и lesson равны" << endl; 
   if (str == lesson) cout << "str и lesson равны" << endl; 
   if (title == str) cout << "title и str равны" << endl; 
}
но никак не могу пихнуть ее себе в прогу. Ошибки и такое прочее. К тому же я незнаю как оно должно выглядить даже эта перегрузка. Помогите пожалйста написать этот блок чтоб можно было
C++
1
if (str == lesson)
таким путем сравнивать строки.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
24.10.2011, 06:31     Перегрузка оператора == для string #2
C++
1
2
3
bool string::operator ==(const string &str){
   return !strcmp(data, str.data);
}
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
24.10.2011, 09:40     Перегрузка оператора == для string #3
Ещё const надо бы
C++
1
2
3
bool string::operator ==(const string &str) const {
   return !strcmp(data, str.data);
}
lavengerl
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 77
24.10.2011, 16:28  [ТС]     Перегрузка оператора == для string #4
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
#include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
#include <stdlib.h>
using namespace std;
 
class TestContent
{
 
public:
    TestContent(char *){}; //конструктор
int x,y,res;
 
    void Init();
    void ReadFile();
    void Read();
    void testing();
    bool operator ==(const string &str);
 
    struct Task
    {
        char vopros[100];
        char a[30];
        char b[30];
        char c[30];
        char d[30];
        char e[30];
        int tru;
        int balls;
    };  //array[100];
    
    Task mas[3];
private:
    char data[256]; 
};
 
TestContent::TestContent(char *str)
 
{ 
   strcpy(data, str); 
}
 
void TestContent::Init()
{
    int a;
    cout<<"bajaete zapovnutu testu avtomatu4no?"<<endl<<"1-tak"<<endl<<"else-ni"<<endl;
    cin>>a;
    if (a==1) ReadFile();
    else Read();
    cout<<"bajaete proitu danui test?"<<endl<<"1-tak"<<endl<<"2-ni"<<endl;
    cin>>y;
    if (y==1)
    {
        system("cls");
        TestContent::testing();
    }
    else if (y==2)
    {
        cout<<"press enter to continious";
    }
    else cout<<"pomulka!"<<endl;
 
 
}
 
void TestContent::ReadFile()
{
    
    ifstream File1("1.txt");
        for(int i=0;i<3;i++)
        {
            //File1>>TestContent.mas[i].vopros>>obj.mas[i].a>>obj.mas[i].b>>obj.mas[i].c>>obj.mas[i].d>>obj.mas[i].e>>obj.mas[i].tru>>obj.mas[i].balls;
            //cout<<obj.mas[i].vopros<<obj.mas[i].a<<obj.mas[i].b<<obj.mas[i].c<<obj.mas[i].d<<obj.mas[i].e<<obj.mas[i].tru<<obj.mas[i].balls;
            File1>>TestContent::mas[i].vopros>>TestContent::mas[i].a>>TestContent::mas[i].b>>TestContent::mas[i].c>>TestContent::mas[i].d>>TestContent::mas[i].e>>TestContent::mas[i].tru>>TestContent::mas[i].balls;
            //cout<<"v:"<<TestContent::mas[i].vopros<<"\ta="<<TestContent::mas[i].a<<"\tb="<<TestContent::mas[i].b<<"\tc="<<TestContent::mas[i].c<<"\td="<<TestContent::mas[i].d<<"\te="<<TestContent::mas[i].e<<"\ttru="<<TestContent::mas[i].tru<<"\tballs="<<TestContent::mas[i].balls<<endl;
        }
}
 
void TestContent::Read()
{
for(int i=0;i<3;i++)
        {
            cout<<"bilet N"<<i+1<<endl;
            cout<<"vvedit putannia: "; cin>>TestContent::mas[i].vopros;
            cout<<"vvedit variantu vidpovidi:"<<endl;
            cout<<"a: ";cin>>TestContent::mas[i].a;
            cout<<"b: ";cin>>TestContent::mas[i].b;
            cout<<"c: ";cin>>TestContent::mas[i].c;
            cout<<"d: ";cin>>TestContent::mas[i].d;
            cout<<"e: ";cin>>TestContent::mas[i].e;
            cout<<"vvedit nomer pravulnoi vidpovidi: "; cin>>TestContent::mas[i].tru;
            cout<<"vvedit kilkist baliv za virny vidpovid:"; cin>>TestContent::mas[i].balls;
            cout<<endl;
        }
}
 
void TestContent::testing()
{
    int y;
    res=0;
        for (int i=0;i<3;i++)
        {
            cout<<"Putannia N"<<i+1<<endl;
            cout<<"putannia:"<<TestContent::mas[i].vopros<<endl<<"a="<<TestContent::mas[i].a<<endl<<"b="<<TestContent::mas[i].b<<endl<<"c="<<TestContent::mas[i].c<<endl<<"d="<<TestContent::mas[i].d<<endl<<"e="<<TestContent::mas[i].e<<endl<<"balls="<<TestContent::mas[i].balls<<endl;
            cin>>y;
            if (y==TestContent::mas[i].tru)
            {
                cout<<"virno!"<<endl;
                res=res+TestContent::mas[i].balls;
            }
            else cout<<"nevirno!"<<endl;
        }
    cout<<"resultat testy: "<<res<<endl;
}
 
bool TestContent::operator ==(const string &str)
{
   return !strcmp(data, str.data);
}
 
 
int main()
{
    TestContent obj("werwew");
    TestContent obj2("sasddsa");
    TestContent obj3("werwew");
    if (obj == obj2) cout<<"true";
    else cout<<"false";
 
l1: cout<<"1-Proxodjennia testy"<<endl<<"2-Pedaryvannia testy"<<endl;
    cin>>obj.x;
    if (obj.x==1)
    {
            obj.ReadFile();
            obj.testing();
            getch();
    }
    else if (obj.x==2)
    {
            obj.Init();
            getch();
    }
    else 
        {
            cout<<"pomulka"<<endl;
        };
 
system("cls");
goto l1;
return 0;
}
сделал все что понял с этого, но не пашет) помогите плиз.
Миниатюры
Перегрузка оператора == для string  
lavengerl
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 77
24.10.2011, 21:17  [ТС]     Перегрузка оператора == для string #5
помогите пожалуйста, как правильно организовать эту перегрузку? ато что делать с этими 3-ма строчками я незнаю.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
24.10.2011, 21:21     Перегрузка оператора == для string #6
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
#include <iostream>
#include <string.h>
 
class string
{ 
public: 
    string(char *); 
    char * operator +(char *); 
    char * operator -(char); 
    bool operator ==(const string&); 
    void show_string(void); 
private: 
    char data[256]; 
};
 
string::string(char *str)
{ 
    strcpy(data, str); 
}
 
bool string::operator ==(const string &str)
{
    return !strcmp(data, str.data);
}
 
void string::show_string(void)
{ 
    cout << data << endl; 
}
 
int main(void)
{ 
    string title( "Учимся программировать на C++"); 
    string lesson("Перегрузка операторов"); 
    string str( "Учимся программировать на C++"); 
 
    if (title == lesson)
        cout << "title и lesson равны" << endl; 
    if (str == lesson)
        cout << "str и lesson равны" << endl; 
    if (title == str)
        cout << "title и str равны" << endl; 
 
    return 0;
}
lavengerl
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 77
24.10.2011, 22:36  [ТС]     Перегрузка оператора == для string #7
не работает ваша программа. Помогите плз.
Миниатюры
Перегрузка оператора == для string  
lavengerl
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 77
24.10.2011, 23:45  [ТС]     Перегрузка оператора == для string #8
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
#include <iostream>
#include <string.h>
using namespace std;
 
class one
{ 
public: 
        one(char *); 
        bool operator ==(const string&); 
        void show_string(void); 
private: 
        char data[256]; 
};
 
one::one(char *str)
{ 
        strcpy(data, str); 
}
 
bool one::operator == (const string &str)
{
        return !strcmp(data, str.data);
}
 
void one::show_string(void)
{ 
        cout << data << endl; 
}
 
int main(void)
{ 
        one title( "Учимся программировать на C++"); 
        one lesson("Перегрузка операторов"); 
        one str( "Учимся программировать на C++"); 
 
        if (title == lesson)
                cout << "title и lesson равны" << endl; 
        if (str == lesson)
                cout << "str и lesson равны" << endl; 
        if (title == str)
                cout << "title и str равны" << endl; 
 
        return 0;
}
пробовал что-то исправить. не получаеться. помогите люди.
lavengerl
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 77
24.10.2011, 23:47  [ТС]     Перегрузка оператора == для string #9
ошибки:
Миниатюры
Перегрузка оператора == для string  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 04:45     Перегрузка оператора == для string
Еще ссылки по теме:

C++ Перегрузка оператора + для стека
C++ Перегрузка оператора сравнения для строк
Перегрузка оператора для последовательных действий C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
26.10.2011, 04:45     Перегрузка оператора == для string #10

C++
1
2
3
4
bool one::operator == (const one &str)
{
        return !strcmp(data, str.data);
}
Yandex
Объявления
26.10.2011, 04:45     Перегрузка оператора == для string
Ответ Создать тему
Опции темы

Текущее время: 00:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru