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

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

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

Приведите пример перегруженного ввода / вывода с консольными потоками - C++

26.10.2013, 22:36. Просмотров 537. Ответов 11
Метки нет (Все метки)

наведите пожалуйста пример перегруженного ввода / вывода с консольными потоками?
и описание перегруженных операций сравнения?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2013, 22:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приведите пример перегруженного ввода / вывода с консольными потоками (C++):

Работа с потоками ввода и вывода - C++
Добрый день, всем! Пишу программу, которая бы хранила определенные данные(в моем случае строка и число) в файле на компьютере. При этом...

Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса - C++
Здравствуйте! Можно ли использовать перегруженный оператор ввода/вывода в поток из базового класса для объекта производного класса, если...

Ошибка при работе с потоками ввода (вывода) в файл (из файла) - C++
Изучаю перегрузку операторов ввода/вывода с файлом и без. Вылетает такая ошибка при отработанном коде: Необработанное исключение по...

Приведите пример. - C++
Программа с использованием функции без параметров. Можете разьяснить все как есть

Ошибка при использовании перегруженного оператора вывода в поток: no match for 'operator<<' - C++
Пытаюсь написать класс комплексных чисел, но не могу сделать вот что: #include &lt;iostream&gt; #include &quot;head.h&quot; using namespace std; ...

Приведите пример инвариантности - C++
Если можно, то объясните на конкретном примере(желательно лёгком в понимании) что такое инвариантность. На словах понятно, что это...

11
Banddk
37 / 37 / 1
Регистрация: 08.12.2012
Сообщений: 157
Записей в блоге: 1
26.10.2013, 22:42 #2
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
class complex{ //публичные поля для работы cin and cout
public:
    double x,y;
    complex(){
        x=0;
        y=0;
    };
    complex(double a,double b){
        x=a;
        y=b;
    }
    
    bool operator==(const complex&t){
        if((x==t.x)&&(y==t.y))
            return true;
        else
            return false;
    }
 
    
};
 
ostream &operator<<(ostream &out, complex t)
{
    out<<t.x;
    if(t.y!=0)
        out<<"+i*("<<t.y<<")";
    
    return out;
}
 
istream &operator>>(istream &in, complex &t)
{
    cout<<"RealPart\n>";
    in >> t.x;
    cout<<"ImagePart\n>";
    in>>t.y;
    return in;
}
Добавлено через 37 секунд
Класс комплексных чисел ) здесь есть и сравнение и перегрузка вывода и ввода)
0
olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
26.10.2013, 22:58  [ТС] #3
А если у меня например есть программа, а мне нужно сортировать, какой-то определенный массив экземпляров класса(пусть это будут целые числа например) с использованием перегруженных операций сравнения. Как это сделать здесь?
Не могу додуматься как сформировать массив из целых чисел?
Буду очень благодарна если поможете
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
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <cctype>
 
typedef std::istream_iterator<std::string> input_str;
typedef std::ostream_iterator<std::string> output_str;
 
class Line
{
  public:
    Line();
    Line(const char *);
    Line(const std::string &);
    ~Line();
 
    std::string getData() const;
    void setData(const char *);
    void setData(const std::string &);
    void modifyInt(const int);
    bool firstWordEqual(const std::string &);
    bool firstWordEqual(const char *);
    std::string findInt() const;
 
  protected:
    std::string data;
};
 
std::ostream & operator<< (std::ostream &, const Line &);
std::istream & operator>> (std::istream &, Line &);
 
bool isInt(const std::string &);


cpp
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
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <cctype>
#include "Line.h"
 
typedef std::istream_iterator<std::string> input_str;
typedef std::ostream_iterator<std::string> output_str;
 
 
Line::Line() : data()
{}
 
Line::~Line() 
{}
 
Line::Line(const char *c) : data(c)
{}
 
Line::Line(const std::string &s) : data(s)
{}
 
 
std::string Line::getData() const
{
    return data;
}
 
void Line::setData(const char *c)
{
    data.assign(c);
}
 
void Line::setData(const std::string &s)
{
    data = s;
}
 
void Line::modifyInt(const int x)
{
  
    std::istringstream ist(data);
    std::ostringstream ost;
    std::replace_copy(input_str(ist), input_str(), output_str(ost),
        this->findInt(), " " + std::to_string(x) + " " );
    data = ost.str();
}
 
bool Line::firstWordEqual(const std::string &key)
{
    std::istringstream ist(data);
    std::string word;  
    ist >> word;       
    return word == key;
}
 
bool Line::firstWordEqual(const char *key)
{
    std::istringstream ist(data);
    std::string word; 
    ist >> word;   
    return word == std::string(key);
}
 
std::string Line::findInt() const
{
 
    std::istringstream ist(data);
    input_str it = std::find_if(input_str(ist), input_str(), isInt);
    return (it == input_str() ? std::string() : *it);
}
 
std::ostream & operator<< (std::ostream &o, const Line &l)
{
    o << l.getData() << std::endl;
    return o;
}
 
std::istream & operator>> (std::istream &ist, Line &l)
{
 
    std::string str;
    std::getline(ist, str);
    l.setData(str);
    return ist;
}
 
bool isInt(const std::string &s)
{
    return std::all_of(s.begin(), s.end(), isdigit);
}
main.cpp
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
#ifndef Line_h_
#define Line_h_
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <cctype>
#include "Line.h"
 
int main()
{  
    std::ifstream ifs("input.txt");
    if (!ifs) return 1;
    std::ofstream o("output.txt");
    Line line; 
    std::string key; 
    std::cout << "Enter word to search: ";
    std::cin >> key;
 
    while (ifs >> line)
    {
        if (line.firstWordEqual(key))
        {
            std::cout << line << std::endl; 
            if (!line.findInt().empty())
            {
                std::cout << "Would you like to change number of pieces? (y/n) ";
                char ch;
                std::cin >> ch;
                if (ch == 'y')
                {
                    int x;
                    std::cout << "Enter new pieces: ";
                    std::cin >> x;
                    line.modifyInt(x);
                }
            }
            o << line;
        }
    }
}
#endif
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
27.10.2013, 00:19 #4
olia90, не понял где в коде нужно сформировать массив. Скидываю пример сортировки объектов:
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
#include <iostream>
#include <algorithm>
class foo
{
    int value;
public:
    int getValue() const
    {
        return value;
    }
 
    foo(int x): value(x) {}
};
 
bool operator < (const foo &lhs, const foo &rhs)
{
    return lhs.getValue() < rhs.getValue();
}
 
int main()
{
    foo objects[10] {5, 6, 3, 2, 1, 9, 0, 7, 7, 5};
    std::sort(std::begin(objects), std::end(objects));
    for (auto &object : objects) {
        std::cout << object.getValue() << ' ';
    }
    return 0;
}
0
olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
27.10.2013, 01:21  [ТС] #5
Кратко: У меня есть строки с данными (словесными и числовым). Я их вывожу на экран и спрашиваю у пользователя желает ли изменить числовое значение (между словами и числом есть пробелы). Пользователь вводит число(программа изменяет старое число на новое) и я записываю новую строку в файл.
И здесь тупик. Не знаю, как сортировать массив экземпляров класса (по произвольному критерию, например какое из чисел в строках больше) с использованием перегруженных операций сравнения?
Помогите пожалуйста!
Буду благодарна
0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
27.10.2013, 02:07 #6
Цитата Сообщение от olia90 Посмотреть сообщение
Кратко: У меня есть строки с данными (словесными и числовым). Я их вывожу на экран и спрашиваю у пользователя желает ли изменить числовое значение (между словами и числом есть пробелы). Пользователь вводит число(программа изменяет старое число на новое) и я записываю новую строку в файл.
вроде бы это в моем коде есть.
Цитата Сообщение от olia90 Посмотреть сообщение
Не знаю, как сортировать массив экземпляров класса (по произвольному критерию, например какое из чисел в строках больше) с использованием перегруженных операций сравнения?
Научить компилятор сравнивать объекты класса перегрузив оператор < как в примере у Olivеr, далее воспользоваться функцией std::sort, можно написать и свой пузырьковый велосипед. Главное, что компилятор уже будет знать, что поставить между объектами Line. Вот только зачем это надо?
0
olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
27.10.2013, 02:25  [ТС] #7
Да. Это именно ваш код. Еще раз спасибо.
Просто я тут подумала. А что, если мы не просто хотим изменить числа, а сортировать массив экземпляров класса (какое из чисел в сроках больше) с использованием перегруженных операций сравнения. Ну и конечно, я не роздуплила этого. Как же это сделать?
Да знаю, вы написали, как это сделать, но на практике мне трудно реализовать это, потому выбивает кучу ошибок. Мне кажется я только замусориваю код.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
27.10.2013, 02:34 #8
Цитата Сообщение от olia90 Посмотреть сообщение
Как же это сделать?
Цитата Сообщение от MrGluck Посмотреть сообщение
Научить компилятор сравнивать объекты класса перегрузив оператор < как в примере у Olivеr, далее воспользоваться функцией std::sort, можно написать и свой пузырьковый велосипед. Главное, что компилятор уже будет знать, что поставить между объектами Line. Вот только зачем это надо?
Вывод разумеется в файл притормозить, считывать линии в multiset (или в динамический массив, а далее сортировать, но тогда по файлам надо будет два раза пробегать. В конце копировать содержимое мультимножества в результирующий файл.
0
olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
27.10.2013, 02:52  [ТС] #9
Спасибо, это поняла, а что значит
Цитата Сообщение от MrGluck Посмотреть сообщение
В конце копировать содержимое мультимножества в результирующий файл.
Непонятно именно что такое "содержимое мультимножества"?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
27.10.2013, 03:07 #10
Цитата Сообщение от olia90 Посмотреть сообщение
содержимое мультимножества
Его элементы. Т.е. для массива A[] = {1, 2, 3, 4} содержимое - 1, 2, 3, 4.
мультимножество - множество с возможностью дубликатов.
Подробнее тут. Это вам автоматически отсортирует элементы по нужному признаку, надо лишь указать как сравнивать.
1
olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
27.10.2013, 03:15  [ТС] #11
Спасибо.

Добавлено через 38 секунд
Спасибо
0
olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
31.10.2013, 13:17  [ТС] #12
Vot i peredelala etu programu
Smotrite:
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
#ifndef tort_h_
#define tort_h_
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
 
class tort
{
private:
    int number;
    static int count;
protected:
    char *nach;
public:
    char *name;
string name_kus;
    int numb_kus;
static int GetCount;
 
    
    void modifyInt(const int);
    void set_nach(char*);
    char*get_nach();
    void set_number(int);
    int get_number();
    bool kus(int );
    bool kus(string);
    string kus ();
    void show ();
    void vvid();
    bool firstWordEqual(const std::string &);
    
    std::string findInt() const;// знаходження числа
    
    static int get_count()
{
    return count;
};
    // допоміжна функція для визначення, чи є слово числом 
    bool isInt(const std::string &);
 
 
    //addition methods
    friend istream& operator >>(istream& in, tort& C)
    {
        char *s = new char[10];
        char *v = new char[10];
        cout<<"\nPlease enter the pises: "; 
        in>>C.number;
        cout<<"\nPlease enter the name: ";  in >> s; C.name = s;
        cout<<"\nPlease enter the inside: ";    in >> v; C.nach = v;
        return in;
    }
 
    friend ostream& operator <<(ostream& out, tort& C)
    {
        return out << "\n\nKilkist kuskiv = " << C.number << "\n Nazva torta = " << C.name << "\n Nachunka = " << C.nach;
    }
 
    void read_file();
    void write_in_file();
//.........................................................
    bool operator >(tort &C)
{
    if(number > C.number) return true;
    return false;
}
//............................................//
    bool operator <(tort &C)
{
    if(number < C.number) return true;
    return false;
}
//............................................//
    bool operator ==(tort &C)
{
    if(number == C.number) return true;
    return false;
}
 
    tort& operator = (tort& C)
    {
        if(&C == this) return *this;
        
        if(C.name)
        {
            name = new char [strlen(C.name)+1];
            strcpy (name, C.name);
        }
        else name = 0;
        
        if(C.nach)
        {
            nach = new char [strlen(C.nach)+1];
            strcpy (nach, C.nach);
        }
        else nach = 0;
        number = C.number;
        return *this;
    }
    int sort(tort,tort);
 
        tort();
    tort(char*,char*, int);
    tort(tort &);
    ~tort();
};
#endif
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
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <cctype>
#include "tort.h"
FILE*out;
FILE*Text;
 
using namespace std;
 const int size = 11; 
  string a[size];
int tort::count = 0;
 
bool tort::kus(int n)
{   if((n<=0)||(n>=12))
    return false;
    name_kus=a[n-1];
    return true;
}
 
bool tort::kus(string s)
{
    for(int i=0; i<12;i++)
    {   if(s==a[i])
    {numb_kus=i+1;
    return true;}
    } 
int j=0;
        for(int k=0; k<12;j=0,k++ )
    {for(int i=0; i<3;i++)
    {if ((a[k])[i]==s[i])
    {j++;
        if(j==3) return true;}}}
    return false;
}
 
string tort::kus()
{
    return name_kus;
}
 
void tort::set_nach(char*s)
{
    nach=s;
}
 
char* tort::get_nach()
{
    return nach;
}
 
void tort::set_number(int s)
{
    number=s;
}
 
int tort::get_number()
{
    return number;
}
 
tort::tort()
{   cout<<"Konstryktor\n";
    cout<< "tort() {"<< hex << this << "}" <<endl;
    number=5;
    name="Nic";
    nach="zawarnuj krem";
count ++;
}
 
void tort::read_file()
{
    char *s = new char [10];
    char *n = new char [10];
    ifstream f("tortu.txt");
    f >> s >> number >> n;
    name = s; nach = n;
    f.close();
 
    }
int tort::sort(tort a,tort b)
{
     return (a.number > b.number);
}
    void tort::write_in_file()
{
    ofstream f("Text.txt", ios::out | ios::app);
    f<<name<<' '; 
    f<<number<<' '<<nach; 
    f.close();
}
 
void tort::vvid()
{
    char*s=new char[12];
    char*b=new char[12];
    int a;
    cout<<"Nazva torta "; cin>>s; cout<<"K-st kuskiv "; cin>>a;
    cout<<"Nachunka -  "; cin>>b;
    this->name=s;
    this->set_number(a);
    this->set_nach(b);
};
 
void tort::show()
{
    cout<<"Nazva torta "<<name<<endl; cout<<"K-st kuskiv "<<number<<endl;
    cout<<"Nachunka -  "<<nach<<endl;
};
 
 
 
tort::tort(tort &m)
{
    name=new char[strlen(m.name)+1];
    nach=new char[strlen(m.nach)+1];
    number=m.number;
    strcpy(name, m.name );
    strcpy(nach,m.nach);
    count ++;
}
 
tort::tort(char*ptr,char*l, int d)
{
int len=strlen(ptr);
int dow=strlen(l);
name=(char*) malloc(len+1);
nach=(char*) malloc(dow+1);
number=d;
strcpy(name,ptr);
strcpy(nach,l); 
count ++;
}
 
tort::~tort()
{count --;}
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 <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <cctype>
#include "tort.h"
 
using namespace std;
 
int main()
{   //konstryctoru
    tort tort_1, tort_2("Surnyk","glasur",3), tort_3(tort_2), tort_4;
    tort *A = new tort[4];
    cout << endl;
    cout <<tort_1 << "\n" << tort_2 << endl;
    cin >> tort_3 ;
    cout << tort_3 << endl;
    tort_4.read_file();
    cout << tort_4 << endl;
    A[0] = tort_1;
    A[1] = tort_2;
    A[2] = tort_3;
    A[3] = tort_4;
    
    //сортування методом пошуку найменшого елемента
    int N = 4;
    int max;
    tort temp;
    while(N >0)
    {  max = 0;
       for(int i = 0; i <N; i++)
         {
        if(A[i].sort(A[i], A[max]))
            max = i;
          }
         temp = A[N-1];
         A[N-1] = A[max];
         A[max] = temp;
         N--;
     }
    for(int i=0; i<4; i++)
    A[i].show();
 
   cout<<endl;  
   system("pause");
}
0
31.10.2013, 13:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2013, 13:17
Привет! Вот еще темы с ответами:

Приведите пример,вывод - C++
Привет,можете пожалуйста привести пример вывода всех файлов txt из папки,и лежащих в этой папке подпапок. Добавлено через 58 минут ...

Приведите пример класса в классе - C++
Приведите пожалуйста пример класса в классе, так что бы в классе a были свойства и методы класса b.

Приведите пример реализации списка - C++
как я понял по своей сути список отличается от массива тем что список исспользует не фиксированный размер памяти и располагается в...

Приведите пример использования оператора switch - C++
напишите пожалуйста простенькую программу с оператором &quot;switch&quot;


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

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

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