Ciao , ho voluto provare a risolvere il problema , pensavo di riuscirci velocemente , invece
ci ho impiegato 1 ora e 20![]()
ho usato quello che conosco del linguaggio c , quindi sicuramente ci sono metodi di risolvere il problema , migliori più pratici , ma che non conosco![]()
se non ti offende , vorrei postarti le modifiche che ho fatto al tuo programma e sapere
cosa ne pensi .
potrebbero esserci delle imprecisioni o errori , e il codice non è tanto chiaro , ma SEMBRA FUNZIONARE
codice:#include <stdio.h> #include <stdlib.h> int estrai_numeri(char *x,int *posizione); int main() { FILE *f; int num_linea = 0; int carat; int search; int occorrenze = 0; int count = 0; int ciclo,i=0; char buffer[200]; int righe_cont_numero[30]={0}; int pos_stringa=0; f = fopen("testo.txt","r"); printf("\ninserisci numero da trovare:\n"); scanf("%d",&search); printf("\nQuante volte provare:\n"); scanf("%d",&ciclo); while(!feof(f)) { if( fgets(buffer,200,f)==NULL) break; num_linea++; pos_stringa=0; while(pos_stringa<strlen(buffer)) { carat=estrai_numeri(buffer,&pos_stringa); printf(" --- %d\n",carat); if(carat == search) { occorrenze++; righe_cont_numero[i]=num_linea; i++; } } } fclose(f); printf("\nIl numero delle linee: %d\n", num_linea); printf("\nIl numero delle occorrenze: %d\n", occorrenze); printf("\nRighe che contengono il valore richiesto: "); for(i=0;righe_cont_numero[i]!=0;i++) printf(" %d ",righe_cont_numero[i]); printf("\n"); system("PAUSE"); } int estrai_numeri(char *x,int *posizione) { char numero[8]; int k=0; while(x[*posizione]!=0)//limita a lunghezza stringa { if ( x[*posizione]>='0'&& x[*posizione]<='9') { numero[k]=x[*posizione]; k++; *posizione+=1; } else if((x[*posizione]<'0'|| x[*posizione] >'9')&&(numero[0]!=0)) { *posizione+=1; return atoi(numero); } else *posizione+=1; } }

Rispondi quotando