TransWikia.com

Переписать код с Python на C++

Stack Overflow на русском Asked on February 23, 2021

Пожалуйста, помогите переписать код с Python на C++
Программа должна выводить самое частое слово в тесте
на вход даётся число строк, затем вводятся сами строки:

txt={}
m=0
for _ in range(int(input())):
    for word in input().split():
        if word in txt:
            txt[word]+=1
        else:
            txt[word]=1
        if txt[word]>m:
            m=txt[word]
for k,val in sorted(txt.items()):
    if val==m:
        print(k)

тест:

3  
vqcg vqcg vqcg vqcg vqcg vqcg vqcg  
vqcg vqcg  
vqcg  

Пытался сам сделать через map, но ничего не получается

К сожалению, это максимум что у меня получилось:

#include<bits/stdc++.h>
#include <string>
#include <map>

using namespace std;
main()
{
    int n, k, i;
    string s, a[100];
    cin >> n;
    getline(cin, s);

    for (i = 0; i < n; i++) getline(cin, a[i]);

    istringstream ist(s);
    map<string, int> m;

    for(string word; ist >> word; ++m[word]);

    cout << m.begin()->first << endl;
}

2 Answers

Да составте частоту включений через std::map и найдите в ней максимальныйое значение приавязанное к ключу

Пример логики - 

std::map<std::string, int> m;
  
  // TODO : add dump line from stdin

  std::string s{"test line test line test 1"};
  std::istringstream ist(s);
  for(std::string word; ist >> word; ++m[word]);

  auto f{[] (const std::pair<std::string, int>& p1, const std::pair<std::string, int>& p2) {return p1.second < p2.second;}};
  auto p_i = std::max_element(std::begin(m), std::end(m), f);

  std::cout << "max frenq : " << p_i->first << std::endl;

 

Answered by Maggot on February 23, 2021

Сравните этот код со своим и попробуйте разобраться, в чем у вас проблемы, самостоятельно (я постарался минимально изменять ваш код и ваш подход):

#include <iostream>
#include <string>
#include <map>
#include <sstream>

using namespace std;
int main()
{
    map<string, int> m;
    int n;
    string s;
    cin >> n;
    for (int i = 0; i < n; i++) {
        getline(cin, s);
        istringstream ist(s);
        for(string word; ist >> word; ++m[word]);
    }
    cout << max_element(m.begin(),m.end(),
                [](auto a, auto b) { return a.second < b.second; })->first
         << endl;
}

Answered by Harry on February 23, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP