Salve, avrei un problema con lo svolgimento di un programma dove la traccia è la seguente:
Sia dato un file di testo (come da esempio) che contiene una sequenza di parole.
Si progettino (almeno) tre funzioni:
- leggi_parole, che riceve in ingresso una stringa che contiene il nome di un file di testo e legge da questo file la sequenza di parole in esso contenuta, memorizzandola in un vettore di stringhe (vett_str);
- crea_stringa_max che riceve in ingresso un vettore di stringhe (vett_str) ed il suo riempimento (riemp), e restituisce come parametro di uscita una nuova stringa (max_car) che contiene un carattere per ogni elemento del vettore vett_str. In particolare, ogni elemento di max_car dovrà essere il carattere più grande (nel senso lessicografico) contenuto nella corrispondente stringa di vett_str (vedi esempio che segue: il carattere più grande di ciascuna parola è visualizzato in grassetto). La funzione crea_stringa_max può utilizzare altre funzioni, opportunamente definite;
- stampa_vett_str che stampa a video un vettore di stringhe (vedi esempio);
e si scriva un programma che, dopo aver letto da tastiera il nome del file di testo e utilizzando la funzioni sopra descritte (ed eventuali altre), legga da questo file la sequenza di parole, la stampi a video, provveda a costruire la stringa max_car e la stampi a video.
Il programma dovrà essere suddiviso in moduli, uno contenente prototipi e dichiarazioni, uno contenente le funzioni leggi_parole, crea_stringa_max, stampa_vett_str (ed eventuali altre funzioni) ed un terzo contenente il main.
Esempio
INPUT (da file di testo):
ogni
tanto
porta
dei
miei
doni
OUTPUT (a video):
Parole lette da file:
ogni tanto porta dei miei doni
Stringa ottenuta:
ottimo
INSERISCO IL MIO SVOLGIMENTO:
codice:
// libreria creata da me file lib.h
const int MAX_ELEM=30;
const int MAX_DIM=30;
typedef char stringa [MAX_ELEM+1];
typedef stringa vett_str [MAX_DIM];
void leggi_parole ( vett_str, int &, const char*);
void stampa_vett_str ( const vett_str, int);
void crea_stringa_max (const vett_str, int, stringa);
int strcmp ( const stringa, const stringa);
void strcpy ( const stringa, stringa);
// definizione delle funzioni lib.cpp
#include <iostream>
#include <cstdlib>
#include "lib.h"
using namespace std;
void leggi_parole ( vett_str s, int & riemp, const char* filename) {
int i;
FILE* fp;
fp= fopen (filename, "r");
if(!fp){
cout<< " il file " <<filename << " non e' stato trovato. impossibile proseguire l'elaborazione del programma\n";
system ("pause");
exit(1);
}
riemp=0;
while ( ! feof (fp)){
fscanf (fp, "%s", &s[riemp]);
riemp++;
}
fclose(fp);
}
void stampa_vett_str ( const vett_str s, int riemp){
int i;
for (i=0; i<riemp; i++)
cout << s <<"\n";
}
void crea_stringa_max (const vett_str s, int riemp, stringa max){
int i;
for (i=0; i<riemp; i++){
if(strcmp( s, s)>0)
strcpy (s, max);
}
cout <<max;
}
void strcpy ( const stringa c, stringa str){
int i=0;
while (c != '\0'){
str=c;
i++;
}
str='\0';
}
int strcmp(const char s[], const char t[]){
int i=0;
while (s==t && s[i]!='\0')
i++;
return s[i]-t[i];
}
// main.cpp
#include <cstdlib>
#include <iostream>
#include "lib.h"
using namespace std;
int main(){
vett_str s;
int riemp;
stringa max;
leggi_parole ( s , riemp, "dati.txt");
stampa_vett_str ( s, riemp);
crea_stringa_max (s, riemp, max);
system("PAUSE");
return EXIT_SUCCESS;
}
Il programma cosi svolto legge solo da file ma non copia esattamente le lettere maggiori, quindi la parole OTTIMO non comprare a video. Grazie in anticipo.