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

создание структуру СТРАНА. добавление и удаление элементов из структуры - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ динамический массив объектов http://www.cyberforum.ru/cpp-beginners/thread328894.html
помогите с функцией PrintGarage, чтоб она выводила массив объектов Garage int main(){ char model; int number = 0; int run = 10000; int numberOfCars; numberOfCars = 3; const int numberOfCars1 = 3; cout << "Number of cars: " << numberOfCars << endl << endl;
C++ Копирование значений из функции в объект Подскажите пожалуйста как скопировать значения из функции void fc(a& z1, a& z2, a& z3) так чтоб он был доступен в объекте a4 ?? И как сделать так чтоб значения http://www.cyberforum.ru/cpp-beginners/thread328893.html
Массив произвольного значения C++
Здравствуйте, как построить массив заранее неизвестного значения, ну например int n; cin >> n; int arr;
Управление кнопками C++
Здраствуйте, решил разобраться в этой теме. Как сделать так, чтобы при нажатии кнопки "Вниз" на клавиатуре, изменился ключ реестра? Как изменить ключ я знаю, но как обработать нажатие кнопки - нет. В документации к сожалению не нашел :(
C++ Работа со строковыми переменными без использования string.h http://www.cyberforum.ru/cpp-beginners/thread328880.html
Нужно заменить в строке s множественные последовательности вхождений символа t на один. То есть "aaabcde" заменяется на "abcde". Существует ли аналог такой функции в string.h?
C++ утечка памяти при сложении разноразмерных матриц #include <iostream> using namespace std; class Matrix { private: int **arr; int cols; int rows; public: подробнее

Показать сообщение отдельно
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
05.07.2011, 12:07     создание структуру СТРАНА. добавление и удаление элементов из структуры
turbo c++ у меня нет, так что немного исправишь
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> // добавишь .h
#include <ctype.h>
#include <fstream> // тут наверно тоже нужет .h
#include <string.h>
 
using namespace std; // это у себя уберешь
 
const char* f_name1 = "file1.txt";
const char* f_name2 = "file2.txt";
 
void copyStr(fstream &f1, fstream &f2);
int countCh(fstream &f1);
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, ".1251");
    fstream file1(f_name1, ios_base::in);
    fstream file2(f_name2, ios_base::out|ios_base::in);
    copyStr(file1, file2);
    cout << "Копирование возможных строк завершено." << endl;
 
    cout << "Количество символов в файле: " << countCh(file2) << endl;
 
    cin.get();
    return 0;
}
 
void copyStr(fstream &f1, fstream &f2)
{
    if (!f1 || !f2)
        return;
 
    char buf[80];
    while ( !f1.eof())
    {
        f1.getline(buf, 80);
        if ( buf[0] == buf[strlen(buf)-1])
            f2 << buf << endl;
    }
}
 
int countCh(fstream &f2)
{
    if (!f2)
        return -1;
 
    f2.seekg(0,ios_base::beg);
    char buf[80];
    int count = 0;
    while ( !f2.eof() )
    {
        f2.getline(buf, 80);
        for (int i = 0; i < strlen(buf); count += (bool)isprint(buf[i++]) );
            //if ( isprint(buf[i]))
                //count++;
    }
 
    return count;
}
Добавлено через 16 часов 4 минуты
На содержимое 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
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
#include <iostream>
#include <string> 
#include <list>
#include <fstream>
 
using namespace std;
 
struct State
{
    string Name;
    string Capital;
    int Pops;
    double Area;
};
 
// Ф-ция добавления нового элемента в список
void addState(list<State> &a);
// Ф-ция добавления нового элемента в список после указанного номера
void addStateToNum(list<State> &a, int n);
// Ф-ция удалить все элементы, в которых численность нас. меньше заданной
void delOfPop(list<State> &a, int pops);
// Ф-ция удаления всех элементов в списке
void delAll(list<State> &a);
// Ф-ция отображения элементов списка на экране
void Display(list<State> &a);
// Ф-ция заполнения списка элементами из файла(новые элементы добавляются в конец списка)
void ReadFile(fstream &file, list<State> &a);
// Ф-ция записи в файла элементов списка
void WriteFile(fstream &file, list<State> &a);
 
// Ф-ция копирования строк файла f1_name в файл f2_name,
// которые начинаются и заканчиваются на одну и ту же букву
void copyStr(const char *f1_name, const char *f2_name);
// Ф-ция подсчета кол-ва символов в файле f_name
int countCh(const char *f_name);
 
// Ф-ция проверки элемента списка на соответвие условию(численность должна быть больше заданой)
bool badValue(State &tmp, int pops)
{
    return tmp.Pops < pops;
}
 
const char* f_name = "State.txt";
const char* f_name1 = "f1.txt";
const char* f_name2 = "f2.txt";
 
int main(int argc, char* argv[])
{
    setlocale( LC_ALL, ".1251");
 
    list<State> theState;
    int tmpPops = 0;
 
    //addState(theState);
    //addState(theState);
    //addState(theState);
 
    fstream file1(f_name, ios_base::in);
    ReadFile(file1, theState);
    file1.close();
 
    addState(theState);
    addStateToNum(theState, 2);
 
    Display(theState);
 
    //cout << "Вставка элементов." << endl;
    //addStateToNum(theState, 2);
    //addStateToNum(theState, 4);
 
    //Display(theState);
 
    /*cout << "Удаление элементов, население которых меньше заданного." << endl;
    cout << "Введите кол-во населения: ";
    cin >> tmpPops;
    cin.ignore();
    delOfPop(theState, tmpPops);
    Display(theState);*/
 
    fstream file2(f_name1, ios_base::out);
    WriteFile(file2, theState);
    file2.close();
 
    copyStr(f_name1, f_name2);
 
    cout << "Количество символов в файле: " << countCh(f_name2) << endl;
 
    //cout << "Удаление всех элементов." << endl;
    //delAll(theState);
    //Display(theState);
 
    //fstream file("f_name1", ios_base::out | ios_base::binary);
    //WriteFile(file, theState);
    //file.close();
 
    //file.open("f_name1", ios_base::in | ios_base::binary);
    //fstream file1(f_name1, ios_base::in);
    //ReadFile(file1, theState);
    //file1.close();
 
    //fstream file2(f_name2, ios_base::out);
    //WriteFile(file2, theState);
    //file2.close();
 
    //Display(theState);
 
    cin.get();
    return 0;
}
 
void addState(list<State> &a)
{
    // Создаем временную переменную
    State *tmp = new State;
 
    // Заполняем её
    cout << "Элемент " << a.size() << endl;
    cout << "Введите название страны: ";
    getline(cin ,tmp->Name);
    cout << "Введите столицу страны: ";
    getline(cin, tmp->Capital);
    cout << "Введите кол-во населения страны: ";
    cin >> tmp->Pops;
    cout << "Введите площадь страны: ";
    cin >> tmp->Area;
 
    cout << "\n";
    cin.ignore();
 
    // Добавляем её в список
    a.push_back( *tmp );
 
    // Освобождаем память
    delete tmp;
}
 
void addStateToNum(list<State> &a, int n)
{
    // Проверяем, чтобы номер элемента был неотрицательным 
    // и не был больше кол-ва элементов в списке
    if ( n < 0 || n > (int)a.size()-1 )
        return;
 
    State *tmp = new State;
 
    cout << "Элемент " << n+1 << endl;
    cout << "Введите название страны: ";
    getline(cin ,tmp->Name);
    cout << "Введите столицу страны: ";
    getline(cin, tmp->Capital);
    cout << "Введите кол-во населения страны: ";
    cin >> tmp->Pops;
    cout << "Введите площадь страны: ";
    cin >> tmp->Area;
 
    cout << "\n";
    cin.ignore();
 
    list<State>::iterator iter = a.begin();
    // Перемещаем итератор на n+1 элемент
    // Это ф-ция небезопасна, т.к. не проверяет выход за храницы контейнера
    // Вместо этого можно использоваьт
    /*n++;
    while (n-- > 0 && iter != a.end())
    iter++;*/
    advance( iter, ++n);
    a.insert( iter, *tmp);
 
    delete tmp;
}
 
void Display(list<State> &a)
{
    if (a.empty())
    {
        cout << "Элементов не обноружено!!!" << endl;
        return;
    }
    list<State>::iterator iter;
 
    for ( iter = a.begin(); iter != a.end(); iter++)
    {
        cout << "Название страны: ";
        cout << (*iter).Name << endl;
        cout << "Столицу страны: ";
        cout << (*iter).Capital << endl;
        cout << "Кол-во населения страны: ";
        cout << (*iter).Pops << endl;
        cout << "Площадь страны: ";
        cout << (*iter).Area << endl;
        cout << "\n";
    }
}
 
void delOfPop(list<State> &a, int pops)
{
    if (a.empty())
    {
        cout << "Элементов не обноружено!!!" << endl;
        return;
    }
    list<State>::iterator iter;
 
    for (iter = a.begin(); iter != a.end();)
    {
        // Проверяем, если элемент не удовлетворяет условию, то удаляем его,
        // иначе переходим другому элементу
        if (badValue(*iter, pops)) a.erase(iter++);
        else ++iter;
    }
}
 
void delAll(list<State> &a)
{
    if (a.empty())
    {
        cout << "Элементов не обноружено!!!" << endl;
        return;
    }
    list<State>::iterator iter;
 
    for (iter = a.begin(); iter != a.end();)
        a.erase(iter++);
}
 
void WriteFile(fstream &file, list<State> &a)
{
    if (!file || a.empty())
        return;
 
    list<State>::iterator iter;
    // Записываем данные в файл
    for (iter = a.begin(); iter != a.end(); iter++)
    {
        file << (*iter).Name << endl;
        file << (*iter).Capital << endl;
        file << (*iter).Pops << endl;
        file << (*iter).Area << endl;
    }
}
 
void ReadFile(fstream &file, list<State> &a)
{
    if ( !file )
        return;
 
    State *tmp = new State;
 
    while ( !file.eof() )
    {
        // Считываем данные из файла
        file >> tmp->Name;
        file >> tmp->Capital;
        file >> tmp->Pops;
        file >> tmp->Area;
 
        // и добавляем в список
        a.push_back(*tmp);
    }
 
    delete tmp;
}
 
void copyStr(const char *f1_name, const char *f2_name)
{
    // Открываем файлы
    fstream f1(f1_name, ios_base::in);
    fstream f2(f2_name, ios_base::out);
 
    // Проверяем, чтобы все открылось без проблем
    if (!f1 || !f2)
        return;
 
    char buf[80]; // символьный буфер
    // Считываем данные пока не доши до конца файла
    while ( !f1.eof())
    {
        f1.getline(buf, 80); // Считываем строку
        if ( buf[0] == buf[strlen(buf)-1]) // Проверяем, чтобы первый и последний символы были одинаковы
            f2 << buf << endl; // Записываем строку в файл
    }
}
 
int countCh(const char *f_name)
{
    // Открываем файл
    fstream f(f_name, ios_base::in);
    if (!f)
        return -1;
 
    char buf[80];
    int count = 0;
    // Считываем данные пока не доши до конца файла
    while ( !f.eof() )
    {
        f.getline(buf, 80); // Считываем строку
        // Подсчитываем кол-во печатных символов в буфере
        for (int i = 0; i < strlen(buf); count += (bool)isprint(buf[i++]) );
    }
 
    return count;
}
 
Текущее время: 07:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru