С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
lavengerl
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 77
#1

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

24.10.2011, 02:19. Просмотров 979. Ответов 9
Метки нет (Все метки)

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)
таким путем сравнивать строки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2011, 02:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора == для string (C++):

Перегрузка оператора >> для пользовательского класса String - C++
Объявление класса: class String { public: //constructor String( const char * = NULL ); //default constructor String( const...

Перегрузка оператора == для string для структуры - C++
Есть программа #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;stdlib.h&gt; using namespace...

Перегрузка оператора для класса - C++
Здравствуйте! Подскажите, пожалуйста, почему так не работает: class ClassA { public: ClassA() { m = 1; ...

Перегрузка оператора = для указателей - C++
Существует ли возможность предопределить оператор = для такого случая? Object* first = new Object(); Object second = first; //...

Перегрузка оператора << для шаблона - C++
У меня есть структура студенты, а класс-шаблон массив элементов. Как сделать оператор универсальным, подходящим для любых типов(и для...

Перегрузка оператора + для структуры - C++
У нас есть две строки S1, S2 .После выполнения S3 = S1 + S2 : 1)в S3 должны быть символы входящие в S1 и в S2 одновременно. 2)Посчитать...

9
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,388
Записей в блоге: 2
Завершенные тесты: 1
24.10.2011, 06:31 #2
C++
1
2
3
bool string::operator ==(const string &str){
   return !strcmp(data, str.data);
}
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,200
Завершенные тесты: 1
24.10.2011, 09:40 #3
Ещё const надо бы
C++
1
2
3
bool string::operator ==(const string &str) const {
   return !strcmp(data, str.data);
}
0
lavengerl
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 77
24.10.2011, 16:28  [ТС] #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;
}
сделал все что понял с этого, но не пашет) помогите плиз.
0
Миниатюры
Перегрузка оператора == для string  
lavengerl
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 77
24.10.2011, 21:17  [ТС] #5
помогите пожалуйста, как правильно организовать эту перегрузку? ато что делать с этими 3-ма строчками я незнаю.
0
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
24.10.2011, 21:21 #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;
}
0
lavengerl
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 77
24.10.2011, 22:36  [ТС] #7
не работает ваша программа. Помогите плз.
0
Миниатюры
Перегрузка оператора == для string  
lavengerl
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 77
24.10.2011, 23:45  [ТС] #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;
}
пробовал что-то исправить. не получаеться. помогите люди.
0
lavengerl
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 77
24.10.2011, 23:47  [ТС] #9
ошибки:
0
Миниатюры
Перегрузка оператора == для string  
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,388
Записей в блоге: 2
Завершенные тесты: 1
26.10.2011, 04:45 #10

C++
1
2
3
4
bool one::operator == (const one &str)
{
        return !strcmp(data, str.data);
}
0
26.10.2011, 04:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 04:45
Привет! Вот еще темы с ответами:

Перегрузка оператора * и / для строки - C++
Есть класс MyString нужно написать перезагрузку Операция *: должна вернуть новую строку, которая возникнет путем пересечения двух строк,...

Перегрузка оператора + для стека - C++
Добрый день. Прошу помощи с перегрузкой этой операции. Цель: перегрузить + так,чтобы он складывал элементы двух стеков в третий.Вроде...

Перегрузка оператора сравнения (==) для массивов - C++
Имеется класс-массив. Нужно сравнить два массива при помощи перегрузки оператора (==) Помогите написать пожалуйста!!! class array ...

Перегрузка оператора ++ для enum class - C++
Доброго времени суток. Имеется перечисление: enum class Month { jan = 1, feb, mar, apr, may, jun, jul, aug, sep, nov, dec ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.