К основному контенту

Работа с потоками ввода-вывода. Алгоритмы STL. Дуравкина. C++

Имеется массив объектов студент (фио, факультет, специальность, год рождения). 
Массив заполняется из файла.
С отсортировать массив по заданному полю с использованием алгоритмов сортировки STL для нисходящей и восходящей сортировки 
использовать разные алгоритмы. 



#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;

int const NUM = 4;

class student
{
public:
string FIO;
string fac;
string spec;
int year_of_birth;

void in(int n)
{
ifstream fin("cppstudio.txt"); // открыли файл для чтения
for (int i = 0; i < n; i++) // пропускаем n - 1 строки
fin.ignore(255, '\n');
fin >> FIO >> fac >> spec >> year_of_birth; // считали первое слово из файла
}
void display()
{
cout << FIO << "   " << fac << "   " << spec << "   " << year_of_birth << endl;
}
};
struct sort_class_x
{
bool operator() (student i, student j)
{
return (i.FIO<j.FIO);
}
} sort_object_FIO;
struct sort_class_x_down
{
bool operator() (student i, student j)
{
return (i.FIO>j.FIO);
}
} sort_object_FIO_down;



void main()
{
vector<student> students(NUM);
for (int i = 0; i < NUM; i++)
{
students[i].in(i);
}
for (int i = 0; i < NUM; i++)
{
students[i].display();
}
cout << "Sort up: " << endl;
sort(students.begin(), students.end(), sort_object_FIO);
for (int i = 0; i < NUM; i++)
{
students[i].display();
}
cout << "Sort down: " << endl;
sort(students.begin(), students.end(), sort_object_FIO_down);
for (int i = 0; i < NUM; i++)
{
students[i].display();
}
}
2. В файле задан текст. С использование алгоритмов STL подсчитать количество букв, наличие заданной подстроки, все слова содержащие заданные буквы (параметры поиска задаются пользователем)
//2. В файле задан текст. С использование алгоритмов STL подсчитать количество букв, наличие заданной подстроки, 
//все слова содержащие заданные буквы (параметры поиска задаются пользователем)

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

void main()
{
string buf;
ifstream fin("cppstudio.txt", ios::in | ios::binary);
while (fin)
{
getline(fin, buf);
}
cout << buf << endl;
cout << "Size: " << buf.length() << endl;
char s;
cout << "Enter string" << endl;
cin >> s;
cout << "Num " << s << " = " << count(buf.begin(), buf.end(), s) << endl;
cout << "Character: ";
cin >> s;
istringstream ist(buf);
while (ist >> buf)
if (buf.find(s) != std::string::npos)
cout << buf << endl;

}
3.
// Имеется файл с текстом. С использование алгоритмов STL сгенерировать файл, содержаций текст в обратном порядке. 
//В результирующем файле заменить все буквы "A " на "a".

#include "stdafx.h"
#include <iostream>
#include <fstream>

using namespace std;
const int MAX_SIZE = 1000000;
char buf[MAX_SIZE + 1];

void main()
{
ifstream fin("cppstudio.txt", ios::in | ios::binary);
fin.read(buf, MAX_SIZE);
int num_read = fin.gcount();
fin.close();

reverse(buf, buf + num_read);
char ch;
cout << "enter character:" << endl;
cin >> ch;
for (int i = 0; i < num_read; i++)
{
if (buf[i] == ch)
buf[i] = tolower (buf[i]);
}

ofstream fout("cppstudio1.txt", ios::out | ios::binary);
fout.write(buf, num_read);
fout.close();
}
//4. Имеется файл с текстом, текст содержит повторяющиеся слова. С использование алгоритмов STL сформировать файл в который будет 
//скопирован текст без повторений слов.

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <map>
#include <string>
using namespace std;
int main()
{
map<string, int> count;
string word;

ifstream fileIn("cppstudio.txt");

while (!fileIn.eof())
{
fileIn >> word;
count[word] += 1;
}
fileIn.close();
ofstream fileOut("cppstudio1.txt");
for (map<std::string, int>::iterator p = count.begin(); p != count.end(); p++)
if (p->second == 1)
fileOut << p->first << '\t';

}

Комментарии

Популярные сообщения из этого блога

ВОПРОС К ЧИТАТЕЛЯМ

Уважаемые читатели моего блога и просто проходящие мимо! У меня появилась идея заняться созданием уроков по интересующим вас темам. Предпочтительно на C++, но не ограничиваясь ими, я хочу поделиться своими знаниями не только в виде готового кода но и подробными объяснениями что к чему. Прошу вас, если вы имеете идею и хотели бы разобраться в какой-то теме - отпишитесь в комментариях, что было бы вам интересно. Постараюсь помочь. 

7 глава, Лафоре Р

*1. Напишите функцию reversit(), которая переворачивает строку (массив типа char). Используйте цикл for, который меняет местами первый и последний символы, затем следующие и т. д. до предпоследнего. Строка должна пере- даваться в функцию reversit() как аргумент. Напишите программу для выполнения функции reversit(). Программа долж- на принимать строку от пользователя, вызывать функцию reversit(), а за- тем выводить полученный результат. Используйте метод ввода, который позволяет использовать внутренние пробелы. Протестируйте программу на примере фразы «Аргентина манит негра».

6 глава, Лафоре Р

*1. Создайте класс Int, имитирующий стандартный тип int. Единственное поле этого класса должно иметь тип int. Создайте методы, которые будут устанавливать значение поля, равным нулю, инициализировать его целым значением, выводить значение поля на экран и складывать два значения типа Int. Напишите программу, в которой будут созданы три объекта класса Int, два из которых будут инициализированы. Сложите два инициализирован- ных объекта, присвойте результат третьему, а затем отобразите результат на экране.