Ho sistemato il codice, ho fatto i cicli di stampa sugli array,ma mi stampa ogni volta valori che non ho richiesto...come file di testo gli ho messo "1566AGGHlppq"
codice:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i;
int k;
int g;
//Array di interi che conterrà le frequenze dei singoli caratteri nell'ordine 1..0 A..Z a..z
int occorrenzaCarattere[62];
//Array di interi che conterrà le frequenze del carattere successivo a quello appena letto
int occorrenzaSuccessivo[62];
//Array di interi che conterrà le frequenze delle sequenze per ciascun carattere
int occorrenzaSequenze[62];
//Variabile ausiliaria nella quale memorizzo il carattere appena letto
char carattereCorrente;
//Variabile ausiliaria nella quale memorizzo il carattere precedente a quello letto
char caratterePrecedente;
//Per il punto 3, è a 1 se stavo già contando quella che stà leggendo come una sequenza di lettere uguali, e quindi non devo ricontarla, 0 altrimenti
int contaSequenza;
int seqcont;
//Apro il file in modalità lettura
FILE *pf;
//pf = fopen(("caratteri.txt","r")!=NULL);
pf = fopen ("caratteri3.txt","r");
if ( pf == NULL)
{
printf("Impossibile aprire il file");
exit(1);
}
//Leggo carattere per carattere dal file finchè il file non è finito
while((carattereCorrente = getc(pf))!=EOF)
{
//Verifico se il carattere letto è una cifra
if ((carattereCorrente >= 48)&&(carattereCorrente <= 57))
{
//Se è una cifra la conta
occorrenzaCarattere[carattereCorrente - 48]++;
//se è in sequenza conta la sequenza per quel carattere
if (carattereCorrente == caratterePrecedente +1)
{
occorrenzaSuccessivo[caratterePrecedente - 48]++;
}
if ((carattereCorrente == caratterePrecedente) && (seqcont==0))
{
contaSequenza = 1;
occorrenzaSequenze[carattereCorrente - 48]++;
}
else
{
contaSequenza = 0;
}
}
//Verifico se il carattere letto è una lettera maiuscola
if ((carattereCorrente >= 65) && (carattereCorrente <= 90))
{
//Se è una lettera maiuscola la conta
occorrenzaCarattere[carattereCorrente - 55]++;
//se è in sequenza conta la sequenza per quel carattere
if (carattereCorrente == caratterePrecedente +1)
occorrenzaSuccessivo[caratterePrecedente - 55]++;
if ((carattereCorrente==caratterePrecedente)&&(seqcont==0))
{
contaSequenza = 1;
occorrenzaSequenze[carattereCorrente - 55]++;
}
else
{
contaSequenza = 0;
}
//Verifico se il carattere letto è una lettera minuscola
if ((carattereCorrente >= 97) && (carattereCorrente <= 122))
{
//Se è una lettera minuscola la conta
occorrenzaCarattere[carattereCorrente - 61]++;
//se è in sequenza conta la sequenza per quel carattere
if (carattereCorrente == caratterePrecedente +1)
occorrenzaSuccessivo[caratterePrecedente - 61]++;
if ((carattereCorrente==caratterePrecedente)&&(seqcont==0))
{
contaSequenza = 1;
occorrenzaSequenze[carattereCorrente - 61]++;
}
else
{
contaSequenza = 0;
}
}
}
}
for(i=0; i<30; i++)
{
printf("occorrenzaCarattere:%d\n",occorrenzaCarattere[i]);
}
for(k=0; k<30; k++)
{
printf("occorrenzaSuccessivo:%d\n",occorrenzaSuccessivo[k]);
}
for(g=0; g<30; g++)
{
printf("occorrenzaSequenze:%d\n",occorrenzaSequenze[g]);
}
}