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

Работа с потоками ввода-вывода. Алгоритмы 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 дня. Становится все интереснее и интереснее! и черт возьми, я наконец-то поняла работу с файлами! прошу прощения за корявые условия. просто в нормальном формате электронной книги у меня нет, потому скрины задач просто пропущены через Файнридер.

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

Эта глава по циклам меня удивила. я  с неким пренебрежением отнеслась к ней, т.к. думала что и так все знаю по этой теме. но Прата так глубоко и в подробностях объяснил тему, что я заново переосмыслила циклы и выражения. было очень много интересных подробностей, которые мне никто не мог толком объяснить. и кстати, парочка задач была над которыми я поломала голову. особенно понравился такой акцент на указателях. как говорится, приучают с малых лет. понять - поняла, но путаюсь в них до сих пор нечеловечески.

Прата С. Решение 3 и 4 главы

Повторюсь, взяла только интересные мне задания, т.е. с элементами того что поняла плохо/не встречала ранее. Сделала за сегодня. с удовольствием отмечаю что сдвиги  в положительную сторону  хотя-бы в стиле есть . в 4 главе ясно объяснено почему при вводе нескольких строк начинаются проблемы, и как этого избежать, подробно описана работа с входным потоком. Как работать со строками стиля Си и класса String, разница. для себя я сделала выводы что лучше всего, конечно-же класс string. намного меньше мороки. и метод ввода getline в обоих случаях. в задачах разница проиллюстрирована. и кстати, указатели больше не вызывают у меня ужаса и трепета. много нового узнала о видах структур. эта глава расставила все по местам в моей голове. правда, зачем в задачи на СР втиснута работа с массивом array - загадка. он ведь толком не объяснен, но понять его интуитивно можно, правда, зачем его использовать не зная тонкостей, как обычный массив с немного иным объявле...