Задача: Вывести не менее 3 слов, содержащих искомую подстроку и встречающихся наиболее часто.
В word_map список слов, в cleanfile такой же список. Проблема такая - при любой введенной подстроки выводит 20 разных слов.
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <codecvt>
#include <windows.h>
#include <cstdio>
#include <stdio.h>
#include <sstream>
#include <locale>
#include <chrono>
#include <iterator>
using namespace std;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
map<string, int> words;
ifstream inputfile;
inputfile.open("input.txt");
string word_t; //sample
string word;
while (inputfile >> word)
{
words[word]++;
}
//запись в map//
ofstream outfile;
outfile.open("text_list.txt");
map<string, int>::iterator cursor;
for (cursor = words.begin(); cursor != words.end(); cursor++)
{
outfile << (*cursor).first << endl;
}
outfile.close();
//удаление символов//
ofstream write;
ifstream inputfile_1;
inputfile_1.open("text_list.txt");
write.open("clean_list.txt");
string s, sr;
char a[32] = { '.' , ',' , ':' , ';' , '!' , '?' , '-' , '"', '(' , ')' , '[' , ']' ,
'—' ,'…', '«' , '»' , '„' ,'“',' —','— ' , '0','1','2','3','4','5','6','7','8','9' ,'_'};
bool f = true;
while (getline(inputfile_1, s))
{
sr = "";
for (int i = 0; i < s.length(); ++i)
{
for (int j = 0; j < 32; j++)
{
if (s[i] == a[j])
{
f = false;
break;
}
}
if (f)
{
sr = sr + s[i];
}
f = true;
}
write << sr << endl;
}
write.close();
//запись clean_list в map//
string word1;
map <string, int> word_map;
ifstream cleanfile;
cleanfile.open("clean_list.txt");
while (cleanfile >> word1)
{
word_map[word1]++;
}
cout << "Введите подстроку: ";
cin >> word_t; //ввод
//cleanfile.close();
while (!cleanfile.eof())
{
string temp;
cleanfile >> temp;
if (temp.find(word_t) != string::npos)
{
word_map[temp]++;
}
}
vector<pair<string, int>> word_vect(word_map.begin(), word_map.end());
sort(word_vect.begin(), word_vect.end(),
[](const pair<string, int>& l, const pair<string, int>& r) -> bool
{
if (l.second != r.second)
return l.second > r.second;
else return l.first < r.first;
});
const unsigned short int len = word_vect.size() > 20 ? 20 : word_vect.size();
if (len)
for (int i = 0; i < len; ++i)
cout << word_vect[i].first << endl;
else cout << "Not found" << endl;
system("pause");
return 0;
}
ссылка на текстовый файл на Яндекс.диск - https://yadi.sk/i/Y8EvrCvmyvUeew
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нужно при клике на кнопке открыть приложение камеры, сделать снимок и сохранить егоВот сам обработчик:
Имеется сервер который слушает команды от подключившихся клиентовПри обработке команды(запросов) клиенту отправляется массив данных