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

Перегрузка оператора "=" - C++

Восстановить пароль Регистрация
 
BiSoN2008
 Аватар для BiSoN2008
1 / 1 / 0
Регистрация: 05.01.2011
Сообщений: 13
08.01.2012, 00:23     Перегрузка оператора "=" #1
Дано такое задание Ввести строку символов S1. Программа должна содержать перегруженную операцию “=”, использование которой скопирует S1 в S2 при следующих условиях:Подстроку в квадратных “[ ]” скобках.
вот пробовал написать, только чето не могу разобраться как тут правильно скопировать помогите кто)

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
#include <iostream>
#include <cstring>
#include "conio.h"
using namespace std;
 
class strtype {
    char string[80];
public:
    strtype () {*string='\0';}
    strtype (char *p) { strcpy(string, p);}
    char *get() { return string; }
    strtype operator= (strtype s2); //ïåðåãðóçêГ* ïðèñâîåГ*ГЁГї ñòðîê
};
 
 
strtype strtype::operator = (strtype s2)
{
      // char string[] = "aaa[123]",string2[]= "privet";
        int pos, count, i, len = strlen(string);
        char p[15], j;
        for(i = 0; i < len; i++)
        {
                count = 0;
                pos = 0;
                if (string[i] == '[')
                {
                        pos = i + 1;
                        while (string[pos + count] != ']')
                                count++;
                        
                        
                        for(j = 0; j < count; j++)
                                p[j] = string[pos + j];
                        p[count] = '\0';
                       // printf("Naudenaya stroka=%s\n", p);
                        
                }
            
        }
        
            strcpy(p,string);
                //printf("%s\n",string2);
            
                            
       return*this;
        
}
 
int main()
{
strtype o1("123 [456] 789"), o2("");
o1=o2;
cout <<"S1= "<< o1.get() << "\n";
cout <<"S2= "<< o2.get() << "\n";
system("pause");
return 0;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2012, 00:23     Перегрузка оператора "="
Посмотрите здесь:

Перегрузка оператора вывода в классе "Время" C++
C++ Перегрузка оператора "-" (вычитание матриц)
C++ Перегрузка оператора "<<" для вывода пользовательских классов
Перегрузка операторов: Можно ли вынести "тело" оператора (расчеты) из H в CPP? C++
Перегрузка оператора "++" и "--" в чем может быть причина нарушение прав доступа? C++
Перегрузка оператора "++" и "--" , компилирует, но при запуске программы - ошибка C++
C++ Перегрузка оператора "+" в классе
Перегрузка оператора "+", чтобы выполнял "*" C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
08.01.2012, 00:48     Перегрузка оператора "=" #2
у тебя в main() не правильно сам оператор вызывается, нам наоборот надо. Если я правильно понял задание, то можно реализовать так
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
#include <iostream>
#include <cstring>
#include "conio.h"
using namespace std;
 
class strtype
{
    char string[80];
public:
    strtype ()
    {
        *string = '\0';
    }
    strtype (char *p)
    { 
        strcpy(string, p);
    }
    const char *get() const
    {
        return string;
    }
    const strtype& operator= (strtype s2); 
};
 
const strtype& strtype::operator = (strtype s2)
{
    const char* begin = s2.get();
 
    while (*begin && *begin != '[')
        ++begin;
    if (*begin == NULL)
        return *this;
 
    ++begin;
    unsigned int i = 0;
    unsigned int length = strlen(begin);
    while (begin[i] != ']' && i < length)
        ++i;
    if (i == length)
        return *this;
    else
        strncpy(string, begin, i);
    string[i] = NULL;
 
    return *this;
}
 
int main()
{
    strtype o1("123 [456] 789"), o2("");
    o2 = o1;
    std::cout << "S1= " << o1.get() << std::endl;
    std::cout << "S2= " << o2.get() << std::endl;
 
    system("pause");
 
    return 0;
 
}
Yandex
Объявления
08.01.2012, 00:48     Перегрузка оператора "="
Ответ Создать тему
Опции темы

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