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

Класс для работы со скалярным типом данных в стиле языка Перл - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Отсортировать по возрастанию элементы массива с четными номерами методом выбора (Pascal->C++) http://www.cyberforum.ru/cpp-beginners/thread1200617.html
Дан целочисленный массив A(n) с элементами, сгенерированными случайными числами в диапазоне (-20, 20). Требуется: Отсортировать по возрастанию элементы массива с четными номерами методом выбора. var a: array of integer; i,j,n,t,m: integer; begin repeat write('Введите размер массива n (n < 100): '); readln(n); until n in ;
C++ Распечатать фамилии детей данного детского сада, которые родились в определенном месяце (Pascal->C++) Распечатать фамилии детей данного детского сада, которые родились в определенном месяце; указать их возраст и группу. uses crt; const N=3; //количество детей type FIO = record family : string; // фамилия name : string; // имя end; type DATE = record http://www.cyberforum.ru/cpp-beginners/thread1200616.html
Выполнить циклический сдвиг элементов квадратной матрицы, используя локальные и динамические массивы C++
Осуществить циклический сдвиг элементов квадратной матрицы размерность M x N вправо на k элементов таким образом: элементы первой строки сдвигаются в последний столбец сверху вниз, из него - в последнюю строку справа налево, из неё - в первый столбец снизу вверх, из него - в первую строку; для остальных элементов - аналогично. Добавлено через 1 час 11 минут Сам я это даже не представляю как...
C++ Определить, имеются ли в строке числа, состоящие из одной цифры (Pascal->C++)
Дана фраза, в которой слова разделены одним пробелом, а сама фраза заканчивается точкой. Требуется: Определить, имеются ли в ней числа, состоящие из одной цифры. uses crt; var s:string; i,k:byte; begin writeln('Введите фразу из слов, разделенных одним пробелом, в конце точка'); read(s); i:=1; k:=0; while(i<length(s))and(k=0) do
C++ Получить новую матрицу, в которой все отрицательные элементы заменить на -1, положительные на +1 (Pascal->C++) http://www.cyberforum.ru/cpp-beginners/thread1200612.html
Двумерный целочисленный массив A(m,n) задается с экрана либо генерируется в пределах от -20 до 20. Требуется: Получить новую матрицу, в которой все отрицательные элементы заменить на -1, положительные на +1, нулевые – без изменений. uses crt; var c,a:array of integer ; i,j: integer; begin randomize; for i:=1 to 3 do begin
C++ Обработка повторений строк в текстовом файле Добрый вечер! Нужно обработать большой текстовый файл (119Мб, ~6млн. строк), в котором заведомо есть повторения строк и переписать в другой файл, уже без дубликатов строк. Для тестирования создал временный файл с 5 строками и 1 повторением, но скрипт не работает должным образом. Года три уже не работал с С++, голова не варит после N часов мучений. Подсказывайте, братцы! :) #include <cstdlib>... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,667
06.06.2014, 14:20     Класс для работы со скалярным типом данных в стиле языка Перл
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
157
158
159
160
161
162
163
164
165
/////////////////////////////////////////////////////////////////////////////////////////
//Создать класс для работы со скалярным типом данных в стиле языка Перл. Класс должен быть прозрачен 
//с точки зрения число, строка. Т.е. работа методов класса не зависела бы от того, что в данный момент
//хранится в нем число или строка. В класс должны быть включены методы для присваивания и получения
//значений setValue и getValue, а также для методы и операторы для выполнения операций сложения или
//склейки, вычитания, деления и умножения plus, minus, div, mult. Следует обратить внимание на
//возвращаемые значения. Все операции не имеющие смысла для содержащегося в нем значения должны
//генерировать исключительную ситуацию и не оказывать воздействия на данные. Также должны быть
//перегружены операторы ввода вывода в поток.
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <sstream>
#include <stdexcept>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
class  T_scalar
{
    T_str   str_val_;
    //-----------------------------------------------------------------------------------
    friend  std::ostream    &   operator<<
        (
            std::ostream            &   outs,
            T_scalar        const   &   scalar
        )
    {
        outs    <<  scalar.str_val_;
        return  outs;
    }
    //-----------------------------------------------------------------------------------
    friend  T_scalar    operator,
        (
            T_scalar    L,
            T_scalar    R
        );
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    T_scalar( T_str const   &   str =   T_str() )
        :
        str_val_( str )
    {}
    //-----------------------------------------------------------------------------------
    T_scalar( int n )
        :
        str_val_    (
                        num_to_str( n )
                    )
    {}
    //-----------------------------------------------------------------------------------
    T_scalar    operator+= ( T_scalar   scalsr )
    {
        int     L;
        int     R;
        bool    bool_res    =       successfully_get_num_from_str(  str_val_,           L   )
                                &&  successfully_get_num_from_str(  scalsr.str_val_,    R   );
 
        if( !bool_res )
        {
            throw   std::invalid_argument("нечисловой аргумент в числовой операции");
        }
 
        str_val_    =   num_to_str( L += R );
        return  *this;
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    bool  successfully_get_num_from_str
        (
            T_str   const   &   str,
            int             &   n
        )
    {
        T_str    const   FINISH_STR     =   "$$$";
        std::istringstream  ssin( str + FINISH_STR );
        ssin    >>  n;
        T_str   s;
        ssin    >>  s;
        return  s == FINISH_STR;
    }
    //-----------------------------------------------------------------------------------
    T_str   num_to_str( int  n )
    {
        std::ostringstream  sout;
        sout    <<  n;
        return  sout.str();
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
T_scalar    operator+
    (
        T_scalar    L,
        T_scalar    R
    )
{
    return  L += R;
}
/////////////////////////////////////////////////////////////////////////////////////////
T_scalar    operator,
    (
        T_scalar    L,
        T_scalar    R
    )
{
    return  T_scalar( L.str_val_ + R.str_val_ );
}
/////////////////////////////////////////////////////////////////////////////////////////
int  main()
{
    std::locale::global(std::locale(""));
    try
    {
        T_scalar    A = "5555";
        T_scalar    B = 4;
 
        std::cout   <<  ( A, B, A )
                    <<  std::endl;
 
        std::cout   <<  ( A, B )
                    <<  std::endl;
 
        std::cout   <<  T_str("101") + B
                    <<  std::endl;
 
        std::cout   <<  B   +   T_str("101")
                    <<  std::endl;
 
        std::cout   <<  1000   +   T_str("101")
                    <<  std::endl;
 
        std::cout   <<  T_str("101")    +   1000
                    <<  std::endl;
 
        std::cout   <<  T_str("101") + T_str("101")
                    <<  std::endl;
 
        std::cout   <<  ( T_str("101") , T_str("101") )
                    <<  std::endl;
 
        std::cout   <<  ( T_str("101") , 15 )
                    <<  std::endl;
 
        std::cout   <<  20 + B
                    <<  std::endl;
 
        std::cout   <<  B + 20
                    <<  std::endl;
 
        std::cout   <<  5 + T_str("1000") + 10
                    <<  std::endl;
 
        std::cout   <<  T_str("abba") + 4
                    <<  std::endl;
    }
    catch( std::exception&  e )
    {
        std::cout   <<  e.what()
                    <<  std::endl;
    }
 
    system( "pause" );
}
 
Текущее время: 19:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru