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;
}
}