codice:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main () {
char o_letter[17];
string n_letter[17];
// dizionari li ho messi dentro le graffe per poterli chiudere nell'IDE
{o_letter[0]='b';
o_letter[1]='c';
o_letter[2]='e';
o_letter[3]='h';
o_letter[4]='i';
o_letter[5]='j';
o_letter[6]='k';
o_letter[7]='m';
o_letter[8]='o';
o_letter[9]='p';
o_letter[10]='r';
o_letter[11]='s';
o_letter[12]='u';
o_letter[13]='v';
o_letter[14]='w';
o_letter[15]='x';
o_letter[16]='y'; }
{n_letter[0]="Ь";
n_letter[1]="с";
n_letter[2]="ө";
n_letter[3]="һ";
n_letter[4]="і";
n_letter[5]="ј";
n_letter[6]="ĸ";
n_letter[7]="м";
n_letter[8]="ο";
n_letter[9]="р";
n_letter[10]="г";
n_letter[11]="ѕ";
n_letter[12]="υ";
n_letter[13]="ν";
n_letter[14]="ω";
n_letter[15]="х";
n_letter[16]="ү";
}
ifstream ingr ;
ofstream usc ;
ingr.open( "source.txt", ios::in);
if (ingr.fail()) exit(-1);
usc.open("dest.txt", ios::out);
if (usc.fail()) exit(-1);
usc<<"<p style=\"text-align: justify;\"><font face=\"Arial\">";
string str;
size_t found;
ingr >> str;
while (!ingr.eof())
{if (ingr.bad()) exit(-1);
unsigned int sostituzioni, max_sosti;
if (str.length()<=2)
max_sosti=1;
else
max_sosti=2;
sostituzioni=0;
do{
found=0;
int i=0;
for(; (i<16)&&((found==0)or(found==string::npos)); i++) // string::npos viene messo su found quando non trova la stringa
found=str.find(o_letter[i]);
if (found!=string::npos) {str.replace(found,1,n_letter[i-1]);
sostituzioni++;
}
else break;
}while(sostituzioni<max_sosti);
usc<<str<<" ";
ingr >> str;
}
usc<<"</font></p>"<<endl;
usc<<"<p style=\"text-align: justify;\"></p>"<<endl;
usc<<"<p style=\"text-align: justify;\">fonte: webnews.it</p>"<<endl;
usc<<"<p style=\"text-align: justify;\"></p>"<<endl;
ingr.close();
usc.close();
return 0;
}
Ho riscritto il prog sempre senza classi però utilizzando le stringhe e del c++, devo dire che in effetti risulta molto meno confusionario, adesso il prog fa quasi quello che deve fare, in realtà funziona però ha due piccole pecche una che non capisco da cosa deriva e un altra che non mi sovviene come poterla gestire;
la prima quella che non capisco da dove deriva riguarda il find, praticamente la sostituzione funziona sempre, tranne quando la lettera da sostituire è la prima della parola, praticamente le prime lettere delle parole non le trova mai, e in oltre se si mette una stringa con tante lettere uguali non li sostituisce tipo cccc mentre cccce sostituisce la e finale anche se in realtà dovrebbe sostituire le prime due c.
Il dubbio invece che non trovo modo di risolvere è quello riguardante i paragrafi, praticamente il testo che inserisco ogni tanto più o meno tre o quattro volte a fine di un pò di frasi ha un ritorno carrello che delimita la fine del paragrafo, gestendo le stringhe parola per parola come faccio a catturare il ritorno carrello? anche perché oltre a non venirmi più i paragrafi non posso inserire i tag che mi servono alla fine e all'inizio del paragrafo.