PDA

Visualizza la versione completa : [C] esercizio in c e difficoltà con le stringhe


M0Rf30
10-02-2009, 18:40
Ciao a tutti,
sono nuovo del forum e per qnt riguarda l'uso di C.
ho scritto un piccolo programma che legge stringhe da testo e le stampa a video sl k m stampa sl l'ultima parola e poi ho completato un' esercitazione ma nella definizione della 2a funzione ho problemi. vi posto il codice nella speranza ke mi possate aiutare in modo esauriente.



#include <stdio.h>
#include <stdlib.h>

main()
{
FILE *fp;
char string[200];
char filename[200];
printf("Inserire nome file:\n");
gets(filename);
fp=fopen(filename, "r");
if(fp!=NULL){
while(fscanf(fp, "%s", &string)!=EOF);
printf("%s", string);
}
else printf("\nErrore apertura file\n");
fclose(fp);
system("PAUSE");
}

M0Rf30
10-02-2009, 18:44
e questa è la seconda funzione:

* La funzione CalcolaOccorrenze prende in ingresso il vettore di stringhe, la
* sua dimensione, un carattere e un vettore. Calcola il numero di
* occorrenze del carattere dato in input per ogni parola del vettore di stringhe
* e la inserisce nella posizione corrispondente del vettore (es.: il numero di
* occorrenze del carattere dato nella prima parola viene inserito nella prima
* posizione del vettore, le occorrenze del carattere nella seconda parola nella seconda
* posizione del vettore, etc.).
*/
void CalcolaOccorrenze(char parole[][MAXNOME], int riemp, char c, int vett[])
{
/* INSERIRE QUI il corpo della funzione */
FILE *fp;
int i, j, cont=0;
fp=fopen("parole.txt", "r");


}

come procedo dopo la fopen?grazie mille per i suggerimenti

KrOW
10-02-2009, 19:14
Ciao... Nel primo pezzo di codice, nello fscanf del while passa string al posto di &string (comunque usa un identificatore diverso visto che string è un tipo già definito in c++) e poi togli il punto e virgola dopo lo stesso while. Per l'altro pezzo prova a implementare 2 cicli innestati :quello esterno scorre le varie stringhe e modifica la stringa secondo l' altro ciclo mentre quello interno scorre i caratteri delle stringhe e impostare il numero di occorenze del carattere. . .

YuYevon
10-02-2009, 19:40
...
if ( fp != NULL ) {
while( fscanf(fp, "%s", stringa) != EOF )
printf("%s", stringa);
}
...


Ma la seconda funzione è collegata alla prima? In quel caso devi salvare in un array di stringhe tutte le stringhe che leggi da file (e non stamparle semplicemente) per poi ragionare su come procedere... insomma, comincia a fare quello altrimenti è inutile perderci troppo la testa.

M0Rf30
10-02-2009, 19:58
il punto è questo,
ho dichiarato una variabile cont e una char c,intuitivamente so ke scorrendo sulle j di parole[][MAXNOME] devo prendere creare una espressione ke mi dica di incrementare cont quando parole[i][j] è uguale a c;
tipo cs:



for(i=0; i<riemp; i++)
{
for(j=0; j<MAXNOME; j++)
{
while(fscanf(fp, "%c", parole[j])== c)
cont++;
vett[i]== cont;
}
}
}

ma nn mi fa compilare e cmq nn mi conta le occorrenze per bene;
ah il primo prog l'ho sistemato.e funziona grazie,
@YuYevon
sn due esercizi separati, non hanno alcun nesso tra loro

KrOW
10-02-2009, 20:24
Prova a spostare vect[i]=cont; subito dopo fuori il secondo ciclo. Per quanto riguarda l' errore di compilazione potresti postare il messaggio d' errore ???

M0Rf30
11-02-2009, 00:14
posso inviare il file come allegato?
io lo posto nella speranza ke qlcn possa aiutarmi.
http://pastebin.com/pastebin.php?dl=f6ddd8508

oregon
11-02-2009, 09:01
Nella riga indicata

vett[i]== cont;} /*qui sta il problema*/

perche' hai inserito

==

?

Se vuoi assegnare un valore devi usare solo

=

KrOW
11-02-2009, 10:33
Comunque da come ho capito CalcolaOccorrenze non deve leggere da file, ma solo modificare un array di stringhe secondo la ricorrenza del carattere.Prova così:


void CalcolaOccorrenze(char parole[][MAXNOME], int riemp, char c, int vett[])
{
int i=0;
int j=0;
int count=0;
for(i=0; i<riemp; i++)
{
for(j=0; j<MAXNOME; j++)
{
if(parole[i][j]==c)
count++;
}
vett[i]=count;
count=0;
}
}

Loading