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

Работа с потоками ввода-вывода. Алгоритмы 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';

}

Комментарии

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

Прата С. Решение задач 6 главы

На решение этих задач у меня ушло 2 дня. Становится все интереснее и интереснее! и черт возьми, я наконец-то поняла работу с файлами! прошу прощения за корявые условия. просто в нормальном формате электронной книги у меня нет, потому скрины задач просто пропущены через Файнридер.

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

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

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

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