Ok, zrobiłem póki co coś takiego:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <map>
using namespace std;
class slownik
{
public:
std::map<string, string> slowka;
void dodaj(string pl, string en);
void zawartosc();
};
void slownik::dodaj(string pl, string en)
{
std::cout << "Podaj slowo po polsku: ";
cin >> pl;
std::cout << "Podaj slowo po angielsku: ";
cin >> en;
slowka[pl] = en;
slowka[en] = pl;
std::cout << "Slowo zostalo wprowadzone";
cin.sync();
cin.get();
}
void slownik::zawartosc()
{
cout << "Polski - Angielski\n";
for (map<string, string>::iterator ii = slowka.begin(); ii != slowka.end(); ++ii)
{
cout << (*ii).first << " - " << (*ii).second << endl;
}
cin.sync();
cin.get();
}
int main()
{
slownik slownik;
int znak;
ofstream plik("slownik");
bool wyjdz=false;
do
{
system("cls");
std::cout << " \t \t \t SLOWNIK Polsko-Angielski";
std::cout << "\n\n\n\n\n";
std::cout << "1. Dodaj nowe slowo\n";
std::cout << "2. Pokaz wszystkie slowa\n";
std::cout << "3. Wyszukaj tlumaczenie\n";
std::cout << "4. Wykonaj test ze snajomosci slowek\n";
std::cout << "5. Wyjdz z programu\n";
cin >> znak;
switch (znak)
{
case 1:
{
string pl, en;
slownik.dodaj(pl, en);
break;
}
case 2:
{
slownik.zawartosc();
break;
}
case 3:
{
std::cout << "3. Dziala\n";
break;
}
case 4:
{
std::cout << "4. Dziala\n";
break;
}
case 5: wyjdz = true; break;
default: cout << "Nieprawidlowa opcja!\n";
}
} while (!wyjdz);
plik.close();
exit(0);
}
Jak na razie program dodaje nowe słowo i wyświetla wszystkie. Jednak wyświetla je tak:
Polski - Angielski
dog - pies
dom - house
house - dom
pies - dog
. Jak zakładam to z powodu:
slowka[pl] = en;
slowka[en] = pl;
Co zrobić, żeby wyświetlało tylko raz dane słowo a nie "w obie strony"?