Witam,
Właśnie zastanawiam się nad programem Uniwersalnej Struktury Słownikowej. Mam pytanie w jaki sposób można wypisywać wszystkie wyrazy które znajdują się w słowniku, tak żeby otrzymać całe wyrazy, a nie podzielone na litery?
Np. kiedy wpiszę do słownika wyrazy: ADAM i ADAMIAKOWA, po wypisaniu zawartości słownika przez metodę pisz_slownik1 otrzymuję:
ADAM
IAKOWA
A niestety, chciałbym aby pokazały się oba wyrazy. Moje pomysły się wyczerpały dlatego proszę o pomoc.
#include <iostream>
#include <cctype>
#include <cstring>
using namespace std;
const int n=29;
class slownik
{
public: slownik *t[n];
};
int do_indeksu(char c)
{
if (c<='Z' && c>='A' || c<='z' && c>='a')
{
return toupper(c)-'A';
}
else
{
if(c==' ') return 26;
if(c=='-') return 27;
}
return -1;
}
char z_indeksu(int n)
{
if(n>=0 && n<=('Z'-'A'))
{
return toupper((char)n+'A');
}
else
{
if(n==26) return ' ';
if(n==27) return '-';
}
return -1;
}
void zapisz(char *slowo,slownik *p)
{
slownik *q;
int pos;
for(int i=1; i<=strlen(slowo); i++)
{
pos=do_indeksu(slowo[i-1]);
if(p->t[pos] != 0) p=p->t[pos];
else
{
q=new slownik;
p->t[pos]=q;
for(int k=0; k<n; q->t[k++]=0);
p=q;
}
}
p->t[n-1]=p;
}
void pisz_slownik(slownik *p)
{
for(int i=0; i<26; i++)
if(p->t[i] != 0)
{
if((p->t[i])->t[n-1]==p->t[i])
cout << z_indeksu(i) << endl << " ";
else
cout << z_indeksu(i);
cout << "-";
pisz_slownik(p->t[i]);
}
}
void pisz_slownik1(slownik *p)
{
for(int i=0; i<26; i++)
if(p->t[i] != 0)
{
if((p->t[i])->t[n-1]==p->t[i])
{
cout << z_indeksu(i) << "" << endl;
}
else
{
cout << z_indeksu(i);
}
cout << "";
pisz_slownik1(p->t[i]);
}
}
void szukaj(char *slowo, slownik *p)
{
int test=1;
int i=0;
while ((test==1) && i<strlen(slowo))
{
if(p->t[do_indeksu(slowo[i])]==0)
test=0;
else
p=p->t[do_indeksu(slowo[i++])];
}
if(i==strlen(slowo) && p->t[n-1]==p && test)
cout << "Slowo znalezione!\n";
else
cout << "Slowo nie zostalo znalezione w slowniku\n";
}
void main()
{
int i;
char tresc[100];
slownik *p=new slownik;
for (i=0; i<n; p->t[i++]=0);
char c='x';
cout<<"-- podaj slowo ktore mam umiescic w slowniku: p, \n";
cout<<"-- podaj slowo ktore mam poszukac w slowniku: s, \n";
cout<<"-- wypisujemy slownik w, \n";
while (c!='k')
{
cin>>c;
switch (c)
{
case 'p':
cout << "Podaj slowo ktore mam umiescic w slowniku: ";
cin >> tresc;
zapisz(tresc,p);
break;
case 's':
cout << "Podaj slowo ktore mam poszukac w slowniku: ";
cin >> tresc;
szukaj(tresc,p);
break;
case 'w':
cout<<"***********************slownik1*******************\n";
pisz_slownik1(p);
cout<<"*************************************************\n";
cout<<"***********************slownik*******************\n";
pisz_slownik(p);
cout << endl;
cout<<"*************************************************\n";
break;
default:
break;
}
}
}