glug:dizionario
Fabrizio Nervi
glug@genova.linux.it
Wed, 5 Dec 2001 19:13:51 +0100
This is a multi-part message in MIME format.
------=_NextPart_000_0024_01C17DC0.F9C03280
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0025_01C17DC0.F9C03280"
------=_NextPart_001_0025_01C17DC0.F9C03280
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Salve, mi chiamo Fabrizio=20
ed ho un problema con Linux, ora vi spiego:
Ho fatto insieme ad un mio amico un semplice programma in C++ per =
effettuare una traduzione di parole in varie lingue. Il problema =E8 che =
noi lo abbiamo fatto e testato con il Visual C++ su Windows e li =
funziona a dovere, noi vorremmo che funzionasse anche su Linux ma sembra =
che qui invece dia un po' di problemi. Noi lo abbiamo provato sul Linux =
Mandrake 7.0 compilandolo con il GCC (ma non so che versione sia). Non =
riusciamo a capire quale sia il problema/i anche perch=E8 non conosciamo =
ancora molto bene Linux ne tanto meno il compilatore. Ci hanno detto in =
molti che la fregatura potrebbe essere proprio il compilatore che magari =
usa librerie diverse da quelle usate dal compilatore di Windows, devo =
dire per=F2 che le istruzioni che usiamo non sono particolari (almeno =
non penso) quindi non so proprio che cosa pensare. Io vi allego il =
programma e i dizionari che usa per fare le traduzioni (sono 5). Nel =
programma sono inseriti i percorsi dei dizionari che va a cercare, per =
noi sono: C:\documenti\prova\*.txt (comunque nel programma si vedono e =
possono essere cambiati a piacere). I dizionari vanno logicamente messi =
nella dir specificata nel programma.
Spero che ci possiate dare un aiuto per far funzionare il programma =
sotto Linux dato che noi da soli non riusciamo a cavare un ragno dal =
buco.
PS.: Vi mando solo il programma in formato CPP, dato che i dizionari che =
utilizza (in TXT) sono troppo estesi e non mi fanno accettare la mail. =
Se qualcuno di voi =E8 poi disposto a darmi una mano magari posso =
spedire i dizionari singolarmente all'indirizzo e-mail specificato.
Per farvi un esempio il dizionario di italiano, che =E8 quello pi=F9 =
corto, occupa 29.5 KB.
Vi ringrazio,
Fabrizio.
------=_NextPart_001_0025_01C17DC0.F9C03280
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content=3D"text/html; charset=3Diso-8859-1" =
http-equiv=3DContent-Type>
<META content=3D"MSHTML 5.00.2614.3500" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>
<DIV><FONT face=3DArial size=3D2>
<DIV><FONT face=3DArial size=3D2>Salve, mi chiamo Fabrizio </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>ed ho un problema con Linux, ora vi=20
spiego:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Ho fatto insieme ad un mio amico un =
semplice=20
programma in C++ per effettuare una traduzione di parole in varie =
lingue. Il=20
problema =E8 che noi lo abbiamo fatto e testato con il Visual C++ su =
Windows e li=20
funziona a dovere, noi vorremmo che funzionasse anche su Linux ma sembra =
che qui=20
invece dia un po' di problemi. Noi lo abbiamo provato sul Linux =
Mandrake=20
7.0 compilandolo con il GCC (ma non so che versione sia). Non riusciamo =
a capire=20
quale sia il problema/i anche perch=E8 non conosciamo ancora molto bene =
Linux ne=20
tanto meno il compilatore. Ci hanno detto in molti che la fregatura =
potrebbe=20
essere proprio il compilatore che magari usa librerie diverse da quelle =
usate=20
dal compilatore di Windows, devo dire per=F2 che le istruzioni che =
usiamo non sono=20
particolari (almeno non penso) quindi non so proprio che cosa =
pensare. Io=20
vi allego il programma e i dizionari che usa per fare le =
traduzioni=20
(sono 5). Nel programma sono inseriti i percorsi dei dizionari che va a =
cercare,=20
per noi sono: C:\documenti\prova\*.txt (comunque nel programma si vedono =
e=20
possono essere cambiati a piacere). I dizionari vanno logicamente messi =
nella=20
dir specificata nel programma.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Spero che ci possiate dare un aiuto per =
far=20
funzionare il programma sotto Linux dato che noi da soli non riusciamo a =
cavare=20
un ragno dal buco.</FONT><FONT face=3DArial size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>PS.: Vi mando =
solo il programma in=20
formato CPP, dato che i dizionari che utilizza (in TXT) =
sono=20
troppo estesi e non mi fanno accettare la mail. Se qualcuno di voi =E8 =
poi=20
disposto a darmi una mano magari posso spedire i dizionari =
singolarmente=20
all'indirizzo e-mail specificato.</FONT></DIV>
<DIV>Per farvi un esempio il dizionario di italiano, che =E8 quello =
pi=F9 corto,=20
occupa 29.5 KB.</DIV>
<DIV><FONT face=3DArial size=3D2>Vi ringrazio,</FONT></DIV>
<DIV><FONT face=3DArial=20
size=3D2>Fabrizio.</FONT></DIV></FONT></DIV></FONT></DIV></BODY></HTML>
------=_NextPart_001_0025_01C17DC0.F9C03280--
------=_NextPart_000_0024_01C17DC0.F9C03280
Content-Type: application/octet-stream;
name="dizionario.cpp"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="dizionario.cpp"
#pragma warning (disable : 4786)
#include<iostream>
#include<string>
#include<fstream>
#include<map>
#include<vector>
using namespace std;
void diz_init(map<string, string>& da, map<string, string>& a, string =
daFile, string aFile)
{
string s1, s2;
ifstream daIn(daFile.c_str()); //stream di input del diz di partenza
ifstream aIn(aFile.c_str()); //stream di input del diz di arrivo
while(getline(daIn, s1)) // while controlla finch=E8 non termina il =
file associato a daIn,=20
{ // getline aquisisce la parola contenuta in daIn e la scrive =
nella
getline(daIn, s2); // stringa s1 o s2
da.insert(map<string, string>::value_type(s2,s1)); //inserisce nel map =
le stringhe s1 e s2
}
while(getline(aIn, s1))
{
getline(aIn, s2);
a.insert(map<string, string>::value_type(s1,s2));
}
daIn.close(); // chiude lo stream di input daIn
aIn.close();
}
void parole(vector<string>& vf, string frase)
{
vf.erase(vf.begin(), vf.end()); //cancella il vettore vf dall'inizio =
alla fine
string tmp=3D"";
unsigned int i=3Dfrase.length(), pos; //genera un intero i e gli =
assegna la lunghezza della frase
for(pos=3D0; pos<i; pos++) //il ciclo riempe il vettore con le parole =
della frase di input
{ =20
if(frase.at(pos)!=3D' ') //va avanti fino a che non incontra il =
carattere spazio
tmp+=3Dfrase.at(pos); //at inserisce in tmp quello che c'=E8 nella =
posizione "pos"
else
{
vf.push_back(tmp); //inserisce nel vettore vf il contenuto di tmp (la =
parola)
tmp=3D"";
}
}
vf.push_back(tmp);
}
void main(void)
{=09
char cont; // dichiarazioni
string da, a;
string s1, s2, s3, frase;
int scelta,scelta2,i=3D0,j=3D0;
map<string, string> daDiz, aDiz;//produco due map con chiave stringa e =
target stringa
vector<string> VFrase; //produco un vettore di stringhe chiamato VFrase
vector<string>::iterator vit; //genero un iteratore al vettore VFrase
cout << "Benvenuti nel dizionario multilingue \n";
cout << "Scegliere la lingua di partenza: \n";
cout <<" italiano(1) inglese(2) tedesco(3) francese(4) =
spagnolo(5) \n";
cin >> scelta;
switch(scelta)
{
case 1 :=20
da=3D"C:\\documenti\\prova\\ita.txt"; //mette nella stringa da il =
percorso del diz
break;
case 2 :
da=3D"C:\\documenti\\prova\\eng.txt"; =09
break;
case 3 :
da=3D"C:\\documenti\\prova\\ted.txt";
break;
case 4 :
da=3D"C:\\documenti\\prova\\fra.txt";
break;
case 5 :
da=3D"C:\\documenti\\prova\\spa.txt";
break;
default :
cout <<"digitare il numero correttamente \n";
break;
}
do
{
cout << "Scegliere la lingua di arrivo: \n";
cout <<" italiano(1) inglese(2) tedesco(3) francese(4) =
spagnolo(5) \n";
cin >> scelta2;
if(scelta=3D=3Dscelta2) //se le lingue di in e out sono uguali da un =
messaggio di errore
cout << "non =E8 possibile tradurre se le lingue di partenza e arrivo =
sono uguali.\n";
}while (scelta=3D=3Dscelta2); //continua finch=E8 le lingue sono =
diverse
=09
switch(scelta2)
{
case 1 :=20
a=3D"C:\\documenti\\prova\\ita.txt";
break;
case 2 :
a=3D"C:\\documenti\\prova\\eng.txt"; =09
break;
case 3 :
a=3D"C:\\documenti\\prova\\ted.txt";
break;
case 4 :
a=3D"C:\\documenti\\prova\\fra.txt";
break;
case 5 :
a=3D"C:\\documenti\\prova\\spa.txt";
break;
default :
cout <<"digitare il numero correttamente \n";
break;
}
cout << "attendere...\n";
diz_init(daDiz, aDiz, da, a); //chiama la funzione di inizializ dei =
dizionari (diz_init)
do
{
=09
cout << "Inserisci la frase: ";
=20
fflush(stdin); //importante, ripulisce lo standard input da eventuali =
caratteri non voluti
=09
getline (cin,frase); //ottiene la frase in input
parole(VFrase, frase); //chiama la funzione che divide la frase in =
parole
for(vit=3DVFrase.begin(); vit!=3DVFrase.end(); vit++) //continua =
finch=E8 vit non arriva alla fine
//del vettore contenente le parole
cout << aDiz[daDiz[*vit]] << ends ; //effettua la traduzione
cout<<"\n";
cout <<"vuoi continuare? (s/n)\n";
cin >> cont;
}while (cont!=3D'n');
=09
}
------=_NextPart_000_0024_01C17DC0.F9C03280--