PDA

Visualizza la versione completa : [C++] Sequenza di caratteri


marcos666
22-03-2011, 16:37
Ciao, non riesco a fare funzionare questo programma:

Esercizio 1. Si scriva un programma completo in C++ OPPORTUNAMENTE MODULARIZZATO IN FUNZIONI che legga da standard
input un testo (cioè una sequenza di caratteri, sia essa A), quindi crei una seconda sequenza (sia essa B), e infine stampi “OK” se è
verificata una certa condizione, e “NO” se questa condizione non è verificata. Le istruzioni per la creazione della sequenza B e per
verificare la condizione sono riportate qui di seguito.
• Il testo nella sequenza A è composto da parole e frasi; le parole sono separate tra loro da trattini (cioè, il carattere ‘-’), e le frasi
sono separate tra loro da punti (cioè, il carattere ‘.’). La sequenza A è terminata da una coppia di punti (cioè la coppia di caratteri
“..”).
• La sequenza B deve contenere un numero intero per ciascuna delle frasi contenute nella sequenza A; questo numero è pari al
numero di parole contenuto nella frase.
• La condizione da verificare sulla sequenza B è la seguente: nessuno dei numeri presenti nella sequenza può comparirvi solo una
volta; ogni numero deve essere presente due o più volte.
NOTE: si può supporre che la sequenza A non sia composta da più di 100 frasi, e che nessuna delle frasi sia vuota.
ESEMPIO: data la sequenza
A=Il-concerto-degli-U2-è-stato-grandioso.Le-nuvole-sono-bianche.La-pizza-più-venduta-è-la-margherita.La-rosa-
profuma.Il-cielo-è-azzurro.Le-nuvole-oggi-sono-nere.Il-gabbiano-vola-nel-cielo.Io-amo-la-pioggia.Viva-la-vita..
Si possono contare 9 frasi prima della coppia di punti che termina il testo. Pertanto la sequenza B conterrà 9 elementi, ciascuno dei ciascuno dei
quali corrispondente ad una delle frasi presenti nella sequenza A, in ordine; e ciascun numero conta il numero di parole della frase
corrispondente.
B=747345543
Infatti la prima frase (“Il-concerto-degli-U2-è-stato-grandioso”) contiene 7 parole; la seconda frase (“Le-nuvole-sono-bianche”)
contiene 4 parole; e così via. Una volta creata la sequenza B, il programma in questo caso dovrà stampare su standard output “OK”:
infatti ciascuno dei numeri presenti nella sequenza B è presente almeno due volte (il 7 è presente due volte, il 4 è presente tre volte, il 3
è presente due volte, e il 5 è presente due volte).

ecco il codice da me scritto:




# include <iostream>
using namespace std;
const int n=100;
const int k=100;
void stampaB (char [], int );
void dimensioneB (char [], char , int , int ,int);
void inserisci (char [],char , int );

void inserisceB (char [], char [], int , int ) ;

int main ()
{
int conTra=0; // conta i trattini
int conFrasi=0; // conta le frasi
int dimensione=0;
int dimensioneBB=0;
char frasi={0};
char A[n];
char B[k];


inserisci (A,frasi, dimensione);
cout<<endl;
dimensioneB(A,frasi,n,conFrasi,dimensioneBB);
cout<<endl;


inserisceB ( A,B, dimensioneBB, conTra) ;


stampaB ( B, dimensioneBB);



return 0;
}

void inserisci (char A[],char frasi,int dimensione)
{
for (int i=0; i<n && frasi!='Z' ;i++)
{
cin>>frasi;
A[i]=frasi;
dimensione=i;
}
}// chiude funzione inserisci

void dimensioneB (char A[], char frasi , int n, int conFrasi, int dimensioneBB)
{
for (int i=0; i<n; i++)
{
if (A[i]=='.')
conFrasi++;
dimensioneBB=conFrasi;// cosi ottengo la dimensione del vettore B[]

}
cout<<dimensioneBB;

}


void inserisceB (char A[], char B[], int dimensioneBB, int conTra)
{


for (int i=0; i<dimensioneBB; i++)

while (A[i]!='.')
{
if (A[i]=='-')
conTra++;
B[i]=conTra;

}



}// chiude la funzione


void stampaB (char B[], int dimensioneBB)
{
for (int i=0;i<dimensioneBB;i++)
{
cout<<B[i];
cout<<endl;
}
}





GRAZIE

marcos666
22-03-2011, 16:39
dimenticavo di segnalarvi che per finire la sequenza A, lho fatta finire col carattere 'Z' poiche non sapevo come dovevo fare per farla finire con doppio punto ".."

se qualcuno mi dicessi come si fa
grazie

VincenzoTheBest
22-03-2011, 18:07
Originariamente inviato da marcos666
dimenticavo di segnalarvi che per finire la sequenza A, lho fatta finire col carattere 'Z' poiche non sapevo come dovevo fare per farla finire con doppio punto ".."

se qualcuno mi dicessi come si fa
grazie
Puoi trovare tante soluzioni alternative. Quella "nativa" consiste nello scorrere la sequenza A carattere per carattere.
Oppure puoi suddividere A in tokens e fare i dovuti calcoli.

marcos666
22-03-2011, 18:10
no ho capito molto bene a che ti riferisci , ci provero comunque, ti ringrazio

VincenzoTheBest
22-03-2011, 18:19
Originariamente inviato da marcos666
no ho capito molto bene a che ti riferisci , ci provero comunque, ti ringrazio
In ogni caso puoi risolvere con un solo ciclo.

mistergks
25-03-2011, 14:37
[OFF TOPIC]
ciao macos...per caso studi informatica all'unical?
[/OFF TOPIC]

alka
26-03-2011, 19:52
Originariamente inviato da mistergks
[OFF TOPIC]
ciao macos...per caso studi informatica all'unical?
[/OFF TOPIC]

Usa i messaggi privati per le comunicazioni - appunto - private.
Gli interventi nella discussione sono riservati alla trattazione del problema.

Loading