Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

zliczanie powtórzeń wyrazów

Ostatnio zmodyfikowano 2015-12-10 18:41
Autor Wiadomość
pulson666
Temat założony przez niniejszego użytkownika
zliczanie powtórzeń wyrazów
» 2015-12-08 17:52:53
http://iv.pl/images​/19054756116246109785.png.


wiem że musze użyć funkcję getline ale co dalej ? jak je zliczyć itp ?
P-141616
Agares
zliczanie powtórzeń wyrazów
» 2015-12-08 18:10:18
Wyciągnąć ze stringa wyrazy poprzez sprawdzenie występowanie ' ' w tekście. Następnie w zmienić litery na małe, albo wielkie/dużo (nie pamiętam które wersja jest prawidłowa :D) wrzucić je do tablicy stringów i sprawdzić czy są sobie równe, jeśli tak to licznik danego wyrazu startujący od 1 zwiększyć o 1. Przynajmniej ja tak rozumiem to zadanie.
P-141617
pulson666
Temat założony przez niniejszego użytkownika
» 2015-12-08 18:12:47
no dobrze rozumiesz, ale teraz powiedz mi jak wypisać te wyrazy które sie nie powtarzają ?
P-141618
michal11
» 2015-12-08 18:49:13
Potrzebne klasy i funkcje:

istringstream (w szczególności użycie:
while( iss >> wyraz )
).
tolower().
map  

Po kolei:
1. wczytujesz linię getlinem
2. w pętli, używając istringstream, wyciągasz każdy wyraz
3. cały wyraz lecisz forem i zamieniasz litery na małe (tolower)
4. sprawdzasz czy w mapie jest już klucz, którym jest twoje słowo (metoda find()), jeżeli nie to dodaj nowy element, jeżeli jest to zwiększ wartość
5. najtrudniejsze, czyli wypisanie posortowanych elementów, łatwe rozwiązanie to stworzenie nowej multimapy i przepisanie do niej wszystkich elementów z pierwszej mapy, trudniejsze to napisanie jakiejś swojej funkcji sortującej
Frazy, które należy wpisać w wyszukiwarkę google:
P-141619
pulson666
Temat założony przez niniejszego użytkownika
» 2015-12-08 18:52:13
C/C++
#include "stdafx.h"
#include <iostream>
#include <string>
#include <sstream>
#include <map>

using namespace std;

int main()
{
   
    string tekst, word;
   
    cout << "Podaj tekst ";
    getline( cin, tekst );
   
   
    istringstream sin( tekst ); // inicjalizacja wczytaną linią
   
    map < string, int > licznik;
   
    while( sin >> word ) // Wczytaj kolejny wyraz ze stringu
    {
        ++licznik[ word ]; // zwiększa liczniki dla daneko wyrazu
       
    }
    for( auto i = licznik.begin(); i != licznik.end(); ++i )
    {
        cout << i->first << ' ' << i->second << '\n';
    }
   
   
    system( "pause" );
    return 0;
}


zrobione daje gotowy kod
P-141620
michal11
» 2015-12-08 18:56:22
Twój kod nie działa zgodnie z tym co jest napisane w treści zadania, w szczególności nie ignoruje wielkości liter i nie wypisuje w kolejności najczęściej występujących wyrazów.
P-141621
pulson666
Temat założony przez niniejszego użytkownika
» 2015-12-10 18:31:48
oczywiście lecz z tym akurat sobie poradzę ;) chodziło mi o samo zliczanie
P-141721
matiamss
» 2015-12-10 18:41:08
P-141722
« 1 »
  Strona 1 z 1