Created
March 6, 2017 04:08
-
-
Save Ivana-/ff55df69789144e59e8f6d9c98dcbe3c to your computer and use it in GitHub Desktop.
Тестовое задание в школу программистов C++
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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