C++ Chmura tagów

0

Witam, mam problem z napisaniem chmury tagów w języku C++ mógłby mi ktoś w tym pomóc. Należy w niej użyć albo mapy,wektora albo nawet może być zwykła tablica.

Całe zadanie jest takie

Chmura tagów. Dla zestawu plików tekstowych (teksty dostepne na stronie, mozna
uzyc w miare obszernych osobiscie sporzadzonych) nalezy znalezc maksymalnie n
tagów (liczba pobrana od uzytkownika) okreslajacych ich zawartosc. Tagi nalezy
zdefiniowac poprzez czestosc wystepowania danego słowa w pliku. Np. w tekscie:

Ala lubi kota, a kot ma mniejsze uszy niz pies.
Pies jest kudłaty i Ala takze lubi tego psa.
Kot nie lubi psa.
powtarzaja sie słowa: Ala (2x), pies(2x), psa(2x), kot(2x), lubi (3x). Zatem przy
zadaniu jednego taga, zostanie nam zwrócone: “lubi”, przy wiekszym zadaniu, gdy
tagi sa tej samej rangi (np. 2x), mozna zwracac je alfabetycznie (np. dla 2 zwrócic:
lubi Ala). Przy braku tagów (pojedyncze słowa nie wchodza w gre) wyswietlamy
mniejsza liczbe tagów.
Dla kilku plików wejsciowych (mozna je podawac z linii polecen) nalezy wyswietlic
tyle samo linii z tagami o licznosci podanej przez uzytkownika.

Próbowałem napisać coś ale jak na razie nie mam pomysłu. Może mi ktoś podrzuci pomysł w jaki sposób to napisać.

0

zrob sobie nowy typ, który będzie zawierał wyraz + ilość wystąpień, gdy będziesz czytał plik, zwiekszasz w danym obiekcie ilość wystąpień, gdy pojawia się nowy, dodajesz nowy element do tablicy właśnie tego typu, po zakończeniu czytania pliku, posortuj tablicę pod względem tych wystąpień od najwiekszej do najmniejszej.

0

jak na razie to napisałem coś takiego

#include<iostream>
#include<fstream>
#include<sstream>
#include<map>

using namespace std;

   int main() {
       int wystapienia;
    ifstream plik("C:/users/skwarosz/desktop/przedwiosnie.txt");
    ofstream wynik("C:/users/skwarosz/desktop/wynik.txt");
    map<int,string> tekst;

    
    for(int i=0;plik.good();i++){
            plik>>tekst[i];
    wynik<<tekst[i]<<" ";
                    }
    wystapienia=0;    
    for(int i=0;plik.good();i++){
            if(tekst[i]==tekst[i+1]){
            wystapienia++;
            }
            }
    wynik<<endl<<wystapienia;
       return 0;
  }
0

czy jest ktoś w stanie mi pomóc w tym zadaniu bo już nie wiem co robić?

0

Mapa nie ma sluzyc jako tablica, ktorej bedziesz sobie uzywac zeby znalezc i-ty wyraz!!
Jesli rzeczywiscie chcesz, poniekad slusznie, uzyc mapy, uzyj slowa jako klucza, a jako wartosc tablicy - przyjmij liczbe wystapien. W ten sposob, jak w petli odczytasz slowo z pliku, bedziesz mogl go uzyc jako indeks do mapy, i mapa "natychmiast" zwroci Ci skojarzona z nim liczbe wystapien. +=1, zapis z powrotem do mapy i koniec zadania..

1 użytkowników online, w tym zalogowanych: 0, gości: 1