Wypisanie wartości powtarzającej się, tylko jeden raz.

0

Witam,
przychodzę z pytaniem: w jaki sposób przerobić ten kod, by wypisał powtarzającą się wartość tylko jeden raz. Ale najpierw może treść zadania. (matura rozsz. 2014)

Wypisz napisy z pliku NAPIS.TXT, które występują w nim więcej niż jeden raz (każdytaki napis wypisz tylko raz).

Mój kod:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;
int isUnique(string a)
{
    ifstream czytaj("NAPIS.txt");

    int licznik = 0;
    string b;
    while(!czytaj.eof())
    {
        czytaj >> b;
        if(a==b) licznik++;
    }
    czytaj.close();
    return licznik;
}

int main()
{
    ifstream czytaj("NAPIS.txt");
    string a;

    while(!czytaj.eof())
    {

        czytaj >> a;

        if(isUnique(a)>1)
        {
            cout << a << endl;
        }
    }

    return 0;
}
 

A to, co dostaję to:

VELEELHXDPVRQCFSE
FHJLMU
GC
GC
QULA
FHJLMU
CEGKZ
BZYFFLOICLUNWLTH
SWIFT
BZYFFLOICLUNWLTH
CEGKZ
SWIFT
QULA

Jak widać wyraz "GC" wypisany jest dwukrotnie, zapewne dlatego, że natrafiając na niego po raz drugi znów liczy mu liczbę jego wystąpień.
Nie mogę nic wymyślić, więc zwracam się o pomoc :)

0
#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;

map<string, int> mWords; /// wyraz, ilosc wystapien

void CheckWord(string text)
{
    for(auto &it : mWords)
     if(it.first == text && ++it.second == 2){
        cout << it.first << endl;
        return;
     }
    mWords[text] = 1;
}

int main()
{
    fstream myFile;
    myFile.open("plik.txt", ios::in);
    string text;
    while(!myFile.eof() && myFile >> text)
     CheckWord(text);
    myFile.close();
    return 0;
}
 

http://www.cplusplus.com/reference/map/map/

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