Skip to content

Instantly share code, notes, and snippets.

@Ivana-
Created March 6, 2017 04:08
Show Gist options
  • Save Ivana-/ff55df69789144e59e8f6d9c98dcbe3c to your computer and use it in GitHub Desktop.
Save Ivana-/ff55df69789144e59e8f6d9c98dcbe3c to your computer and use it in GitHub Desktop.
Тестовое задание в школу программистов C++
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
// компаратор пары в нужном порядке
bool cmp(const std::pair<std::string, int> &l, const std::pair<std::string, int> &r) {
return l.second > r.second ? true :
l.second < r.second ? false :
l.first < r.first;
}
int _tmain(int argc, _TCHAR* argv[]) {
if(argc<3) return -1;
// чтение с накоплением в мап - простое, неюникодное
std::ifstream ifs(argv[1], std::ifstream::in);
std::string s;
std::map <std::string, int> m;
while (ifs >> s) {
// оставим в строке только буквы - просто и неправильно,
// слова типа dsd354687ffg*+-=fgh преобразуются некрасиво, но не будем усложнять
s.erase( std::remove_if( s.begin(), s.end(), []( char c ) { return !isalpha(c) ; } ), s.end() );
// в нижний регистр
std::transform(s.begin(), s.end(), s.begin(), ::tolower);
// ищем в мапе - если есть, увеличиваем счетчик, если нет - добавляем с единицей
if (!s.empty()) {
auto it = m.find(s);
if (it != m.end())
it->second ++;
else
m.insert(std::pair <std::string, int> (s, 1));
}
}
ifs.close();
// мап в вектор, сортировка в нужном порядке
std::vector <std::pair<std::string, int>> v(m.begin(), m.end());
std::sort (v.begin(), v.end(), cmp);
// отсортированный вектор в файл
std::ofstream ofs (argv[2], std::ofstream::out);
for (auto it = v.begin(); it != v.end(); ++it) {
ofs << it->second << " " << it->first << std::endl;
}
ofs.close();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment