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

Вызов функции с левой стороны от операции присваивания - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Хранение и поиск связанных пар строк http://www.cyberforum.ru/cpp-beginners/thread816224.html
Есть строковые данные: имя - логин - данные1 - данные2 пара имя-логин всегда уникальная, данные привязанные к ней могут легко повторяться. Задача: 1)Реализовать функцию добавления проверяющую нет...
C++ Программа Таймер Здравствуйте.Помогите расписать/объяснить каждое действие данной программы.Спасибо. #include <iostream> using namespace std; int main() { setlocale(LC_ALL,"Russian"); int i; int s=0; ... http://www.cyberforum.ru/cpp-beginners/thread816221.html
C++ Y=m*5*g*cosA
Y=m*5*g*cosA
Обнулить кусок памяти (выделенной под указатели) по быстрому C++
Есть хеш-таблица и есть кусок памяти под неё, нужно занулить изначально весь кусок памяти, но как можно быстрее, те хорошо бы использовать что-то из стандартных функций с asm вставками, как вот...
C++ Как разделить код по классам? http://www.cyberforum.ru/cpp-beginners/thread816216.html
Программа имеет слишком долгий код, можно его его как-то разбить на части по тематике, например, и покидать его в другие файлы(.срр), а потом подключить???
C++ Решето Эратосфена Кому надо - программа "Решето Эратосфена" на C++. Записывает в файл 1 000 000 первых простых чисел за 1/10 секунды (без вывода)!!! #include <iostream> #include <fstream> #include <vector> ... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
25.03.2013, 07:28
Вообще-то по условию задачи сам объект строки String должен изменяться.
Можно так сделать:
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
/////////////////////////////////////////////////////////////////////////////////////////
//Разработайте класс String таким образом, чтобы операцию взятия подстроки можно было использовать 
//в левой части операции присваивания. Сначала ограничтесь версией, где длинны подстроки и присваиваемой 
//строки одинаковые. Затем напишите версию с разными длинами.
//
//Нужно перегрузить в классе String операцию выделения строки, но так чтобы она стояла слева 
//от операции присваивания например s.substr(1,3)="Hel"; где s это строка типа String.
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <numeric>
#include <string>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string         T_str;
typedef T_str::size_type    T_pos;
typedef std::vector<T_str>  T_substrings;
/////////////////////////////////////////////////////////////////////////////////////////
class  String
{
    //-----------------------------------------------------------------------------------
    T_substrings    substrings_;
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    String( const T_str&  s )
        :
        substrings_
            (
                T_substrings(1, s)
            )
    {}
    //-----------------------------------------------------------------------------------
    operator T_str()
    {
        return  std::accumulate
                    (
                        substrings_.begin   (),
                        substrings_.end     (),
                        T_str               ()
                    );
    }
    //-----------------------------------------------------------------------------------
    T_str&  substr
        (
            T_pos   pos,
            T_pos   size
        )
    {
        T_str   s   =   *this;
 
        substrings_.clear();
 
        substrings_.push_back
            (
                s.substr
                    (
                        0,
                        pos
                    )
            );
 
        substrings_.push_back
            (
                s.substr
                    (
                        pos,
                        size
                    )
            );
 
        substrings_.push_back
            (
                s.substr( pos + size )
            );
 
        return  substrings_[1];
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout   <<  "Введите строку:"
                <<  std::endl;
 
    T_str   s;
    std::cin    >>  s;
    String  my_s(s);
 
    for(;;)
    {
        std::cout   <<  std::endl
                    <<  std::endl
                    <<  std::endl
                    <<  std::endl
                    <<  "Введите положение подстроки в этой строке:"
                    <<  std::endl;
 
        int pos     =   0;
        std::cout   <<  "позиция:"
                    <<  '\t';
        std::cin    >>  pos;
 
        if(pos < 0)
        {
            break;
        }
 
        int size    =   0;
        std::cout   <<  "размер:"
                    <<  '\t'
                    <<  '\t';
        std::cin    >>  size;
 
        if(size < 0)
        {
            break;
        }
 
        std::cout   <<  std::endl
                    <<  "Введите новое значение для этой подстроки: ";
 
        T_str   new_substr_val;
        std::cin    >>  new_substr_val;
        my_s.substr(pos, size)  =   new_substr_val;
 
        std::cout   <<  "Строка с замененной подстрокой:"
                    <<  T_str(my_s)
                    <<  std::endl;
    }
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru