Написать программу, которая читает строки из файла в массив строк

  • Автор темы AlexMcSeven
  • Дата начала
A

AlexMcSeven

#1
В файле хранятся названия блюд. Каждая строка отдельное название. Написать программу, которая читает строки из файла в массив строк, и выводит на экран названия блюд, отсортировав их: а) по убыванию их длины, б) в алфавитном порядке, в) в порядке, обратном алфавитному.

вот собственно и сама задача...

помогите кто может...
 
R

Rififi

#2
C++:
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <locale>
#include <iostream>
#include <fstream>
#include <iterator>
#include <sstream>

/*
В файле хранятся названия блюд. Каждая строка отдельное название.
Написать программу, которая читает строки из файла в массив строк, и выводит на экран названия блюд, отсортировав их:
а) по убыванию их длины, б) в алфавитном порядке, в) в порядке, обратном алфавитному.
*/

template <typename T>
struct length : public std::binary_function<T, T, bool>
{
bool operator()(const T& s1, const T& s2) const
{
return s2.size() < s1.size();
}
};

template <template <typename> class _Comparer>
void print(std::vector<std::string> v)
{
std::sort(v.begin(), v.end(), _Comparer<std::string>());

typedef std::ostream_iterator<std::string> O;
std::copy(v.begin(), v.end(), O(std::cout, "\n"));

std::cout << std::endl;
}

int main()
{
setlocale(LC_ALL, "");

std::ifstream ifs("dishes.txt");

std::vector<std::string> v;
std::string s;

while (std::getline(ifs, s))
v.push_back(s);

print<length>(v);
print<std::less>(v);
print<std::greater>(v);

return 0;
}