// LettersCounter.c : Questo file contiene la funzione 'main', in cui inizia e termina l'esecuzione del programma. // #include #include #include #define MAX_W_LEN 20 #define NUM_LETTERS 26 #define MIN_LEN 8 int counter(char* filewords, int* alphabet) { FILE* fp; char a[MAX_W_LEN+1]; if ((fp = fopen(filewords, "r")) == NULL) { printf("Error opening file %s: %s\n", filewords, strerror(errno)); return(1); } memset(a, '\0', sizeof(a)); while (fscanf(fp, "%s", a) != EOF) { if (strlen(a) >= MIN_LEN) { //printf("%s\n", a); for (int i = 0; i < strlen(a); ++i) { if (a[i] >= 'a' && a[i] <= 'z') ++alphabet[a[i] - 'a']; } } memset(a, '\0', sizeof(a)); } return(0); } int main(int argc, char* argv[]) { int alphabet[NUM_LETTERS]; if (argc != 2) { printf("Error: usage %s filename_to_read", argv[0]); exit(1); } printf("Filename to be read: %s\n", argv[1]); for (int i = 0; i < NUM_LETTERS; i++) { alphabet[i] = 0; } if (counter(argv[1], alphabet) == 0) { for (int i = 'a'; i <= 'z'; ++i) { if (alphabet[i - 'a'] > 0) { //printf("There are %d occurrences of the character %c\n", alphabet[i - 'a'], i); printf("<%c:%d>\t", i, alphabet[i - 'a']); } } } exit(0); }