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&nbsp;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&nbsp;cosa =
pensare. Io=20
vi allego il programma&nbsp;e&nbsp;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&nbsp;il&nbsp;programma in=20
formato&nbsp;CPP,&nbsp;dato che i dizionari che utilizza&nbsp;(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&nbsp;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--