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

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

Восстановить пароль Регистрация
 
olia90
 Аватар для olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
26.10.2013, 22:36     Приведите пример перегруженного ввода / вывода с консольными потоками #1
наведите пожалуйста пример перегруженного ввода / вывода с консольными потоками?
и описание перегруженных операций сравнения?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2013, 22:36     Приведите пример перегруженного ввода / вывода с консольными потоками
Посмотрите здесь:

C++ Приведите пример.
C++ Приведите пример инвариантности
C++ Приведите пример,вывод
C++ Приведите простейший пример реализации диалога
C++ Ошибка при использовании перегруженного оператора вывода в поток: no match for 'operator<<'
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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 секунд
Класс комплексных чисел ) здесь есть и сравнение и перегрузка вывода и ввода)
olia90
 Аватар для 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
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
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;
}
olia90
 Аватар для olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
27.10.2013, 01:21  [ТС]     Приведите пример перегруженного ввода / вывода с консольными потоками #5
Кратко: У меня есть строки с данными (словесными и числовым). Я их вывожу на экран и спрашиваю у пользователя желает ли изменить числовое значение (между словами и числом есть пробелы). Пользователь вводит число(программа изменяет старое число на новое) и я записываю новую строку в файл.
И здесь тупик. Не знаю, как сортировать массив экземпляров класса (по произвольному критерию, например какое из чисел в строках больше) с использованием перегруженных операций сравнения?
Помогите пожалуйста!
Буду благодарна
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
27.10.2013, 02:07     Приведите пример перегруженного ввода / вывода с консольными потоками #6
Цитата Сообщение от olia90 Посмотреть сообщение
Кратко: У меня есть строки с данными (словесными и числовым). Я их вывожу на экран и спрашиваю у пользователя желает ли изменить числовое значение (между словами и числом есть пробелы). Пользователь вводит число(программа изменяет старое число на новое) и я записываю новую строку в файл.
вроде бы это в моем коде есть.
Цитата Сообщение от olia90 Посмотреть сообщение
Не знаю, как сортировать массив экземпляров класса (по произвольному критерию, например какое из чисел в строках больше) с использованием перегруженных операций сравнения?
Научить компилятор сравнивать объекты класса перегрузив оператор < как в примере у Olivеr, далее воспользоваться функцией std::sort, можно написать и свой пузырьковый велосипед. Главное, что компилятор уже будет знать, что поставить между объектами Line. Вот только зачем это надо?
olia90
 Аватар для olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
27.10.2013, 02:25  [ТС]     Приведите пример перегруженного ввода / вывода с консольными потоками #7
Да. Это именно ваш код. Еще раз спасибо.
Просто я тут подумала. А что, если мы не просто хотим изменить числа, а сортировать массив экземпляров класса (какое из чисел в сроках больше) с использованием перегруженных операций сравнения. Ну и конечно, я не роздуплила этого. Как же это сделать?
Да знаю, вы написали, как это сделать, но на практике мне трудно реализовать это, потому выбивает кучу ошибок. Мне кажется я только замусориваю код.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
27.10.2013, 02:34     Приведите пример перегруженного ввода / вывода с консольными потоками #8
Цитата Сообщение от olia90 Посмотреть сообщение
Как же это сделать?
Цитата Сообщение от MrGluck Посмотреть сообщение
Научить компилятор сравнивать объекты класса перегрузив оператор < как в примере у Olivеr, далее воспользоваться функцией std::sort, можно написать и свой пузырьковый велосипед. Главное, что компилятор уже будет знать, что поставить между объектами Line. Вот только зачем это надо?
Вывод разумеется в файл притормозить, считывать линии в multiset (или в динамический массив, а далее сортировать, но тогда по файлам надо будет два раза пробегать. В конце копировать содержимое мультимножества в результирующий файл.
olia90
 Аватар для olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
27.10.2013, 02:52  [ТС]     Приведите пример перегруженного ввода / вывода с консольными потоками #9
Спасибо, это поняла, а что значит
Цитата Сообщение от MrGluck Посмотреть сообщение
В конце копировать содержимое мультимножества в результирующий файл.
Непонятно именно что такое "содержимое мультимножества"?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
27.10.2013, 03:07     Приведите пример перегруженного ввода / вывода с консольными потоками #10
Цитата Сообщение от olia90 Посмотреть сообщение
содержимое мультимножества
Его элементы. Т.е. для массива A[] = {1, 2, 3, 4} содержимое - 1, 2, 3, 4.
мультимножество - множество с возможностью дубликатов.
Подробнее тут. Это вам автоматически отсортирует элементы по нужному признаку, надо лишь указать как сравнивать.
olia90
 Аватар для olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
27.10.2013, 03:15  [ТС]     Приведите пример перегруженного ввода / вывода с консольными потоками #11
Спасибо.

Добавлено через 38 секунд
Спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2013, 13:17     Приведите пример перегруженного ввода / вывода с консольными потоками
Еще ссылки по теме:

C++ Приведите пример класса в классе
Работа с потоками ввода и вывода C++
C++ Ошибка при работе с потоками ввода (вывода) в файл (из файла)

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

Или воспользуйтесь поиском по форуму:
olia90
 Аватар для 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");
}
Yandex
Объявления
31.10.2013, 13:17     Приведите пример перегруженного ввода / вывода с консольными потоками
Ответ Создать тему
Опции темы

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