Salve a tutti e grazie in anticipo. Voglio postarvi e mettere in discussione il mio programma. Allego traccia e programma. Non riesco a capire perchè non stampa a video. Compila ed esegue ma non stampa il vettore di caratteri più grandi (max_car). Sarei grato se mi risolveste il problema. Grazie ancora per l'attenzione.
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
Ecco il mio programma:
#include <iostream>
#include <cstdlib>
#include <fstream>
#include "lib.h"
#include <string.h>
using namespace std;
int main (){
stringa nomefile;
vettore v;
int riemp;
int lunghezza;
stringa max_car;
cout<< "Inserisci il nome del file da leggere:";
cin >> nomefile;
leggi_parole (v,riemp, nomefile);
cout<<"Il file letto e':";
stampa_parole (v,riemp);
cout<<"\nLa stringa formata dalle lettere lessicograficamente più grandi è: ";
crea_stringa_max (v, riemp,max_car, lunghezza);
stampa_stringa_max (max_car, lunghezza);
}
#include <iostream>
#include <cstdlib>
#include <fstream>
#include "lib.h"
#include <string.h>
using namespace std;
void leggi_parole (vettore v,int&riemp, char* nomefile ){
int i=0;
ifstream input;
input.open(nomefile);
if (input.fail()){
cout<< "File non trovato";
system("PAUSE");
exit(1);
}
while (input.good()){
input>> v[i];
i++;
}
riemp=i;
input.close();
}
void stampa_parole (const vettore v,int&riemp){
int i;
for (i=0; i<riemp;i++){
cout<<v[i]<<" ";
}
}
void crea_stringa_max (const vettore v, int riemp, stringa& max_car, int&lung){
int i, j;
int k=0;
for (i=0; i<riemp;i++){
lung = strlen(v[i]);
max_car [k]= v[i][0];
for (j=1; j<lung; j++){
if (v[i][j]>max_car[k]);
max_car [k]=v[i][j];
}max_car [k++];
max_car [k+1] = '\0';
}
lung=k;
}
void stampa_stringa_max (stringa max_car, int lung){
int i;
while (i<lung && i != '\0'){
cout<< max_car[i];
}
}
const int MAX =100;
typedef char stringa [MAX];
typedef stringa vettore [MAX];
void leggi_parole (vettore,int& riemp, char*nomefile);
void stampa_parole (const vettore, int&riemp);
void crea_stringa_max (const vettore, int riemp, stringa& max_car, int&lung);
void stampa_stringa_max (stringa, int);