/*
Nome: Mario
Cognome: Montanari
Classe: 3AIN
Data: 04/04/2025

es04. (contaparole)
Un file di testo contiene un certo numero di parole.
Ogni parola (a eccezione dell'ultima) e` separata da
quella successiva da un solo carattere di whitespace.
Scrivere un programma che, richiesta l'immissione da
tastiera del nome del file da elaborare, visualizzi il
conteggio delle parole contenute (suggerimento: contare
i whitespace...).
*/

#include <iostream>

#define SIZE_LINE 1000+1

using namespace std;

void apriFile(const char * nomeFile);
int numeroParoleFile(const char * nomeFile);

int main(void) {
	char nomeFile[SIZE_LINE];
	
	cout << "Immetti il nome del file da aprire: ";
	cin >> nomeFile;
	
	cout << endl;
	apriFile(nomeFile);
	cout << endl;
	
	cout << "Numero di parole: " << numeroParoleFile(nomeFile) << endl;
	
	return 0;
}

void apriFile(const char * nomeFile) {
	FILE * fp = fopen(nomeFile, "rt");
	
	if (fp != NULL) {
		char str[SIZE_LINE];
		
		while (fgets(str, sizeof(str), fp) != NULL) {
			cout << str;
		}
		cout << endl;
		
		fclose(fp);
	} else {
		perror("Error");
	}
}

int numeroParoleFile(const char * nomeFile) {
	int countWord = 0;
	
	FILE * fp = fopen(nomeFile, "rt");
	
	if (fp != NULL) {
		char str[SIZE_LINE];
		
		while (fgets(str, sizeof(str), fp) != NULL) {
			for (int i = 0; str[i] != '\0'; i++) {
				if (str[i] != ' ') {
					if (str[i + 1] == ' ' || i == strlen(str) - 1) {
						countWord++;
					}
				}
			}
		}
		
		fclose(fp);
	} else {
		return -1;
	}
	
	return countWord;
}