Il modo migliore di risolvere questo problema è pensare a quello della connettività, dandoti lo spunto di provare questo procedimento:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define ASCII 256
/* Torna la struttura dati con il numero di coccorrenze */
unsigned * compute();
/* Stampa le occorrenze non alfanumeriche */
void print_occorrenze( const unsigned *occorrenze );
int main()
{
unsigned *occorrenze = compute();
if( occorrenze != NULL )
{
print_occorrenze( occorrenze );
free( occorrenze );
}
getchar();
return 0;
}
/* Stampa le occorrenze non alfanumeriche */
void print_occorrenze( const unsigned *occorrenze )
{
unsigned i;
printf( "\n\nOccorrenze:\n" );
for( i = 0; i != ASCII; ++i )
{
if( !isalnum(i) && occorrenze[i] )
printf( "%c %u\n", (unsigned char) i, occorrenze[i] );
}
putchar('\n');
}
/* Torna la struttura dati con il numero di coccorrenze */
unsigned * compute()
{
char filename[ 300 ];
FILE *fileptr = NULL;
printf( "Nome del file? " );
scanf( "%300s%*c", filename );
fileptr = fopen( filename, "rt" );
if( fileptr != NULL )
{
unsigned *occorrenze = (unsigned *) calloc( ASCII, sizeof(unsigned) );
if( occorrenze != NULL )
{
/* Parte principale */
while( !feof(fileptr) )
{
int c = fgetc(fileptr );
if( c != EOF )
++occorrenze[ c ];
}
fclose( fileptr );
return occorrenze;
}
fclose( fileptr );
}
return NULL;
}
Era quello che cercavi?