Проблема в поиске подстроки

137
14 июля 2019, 04:50

Задача: Вывести не менее 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

READ ALSO
NullPointerException при получении URI для файла

NullPointerException при получении URI для файла

Нужно при клике на кнопке открыть приложение камеры, сделать снимок и сохранить егоВот сам обработчик:

159
Сокеты. Прием от сервера массива данных

Сокеты. Прием от сервера массива данных

Имеется сервер который слушает команды от подключившихся клиентовПри обработке команды(запросов) клиенту отправляется массив данных

201