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

es18. (occorrenze)
Scrivere una funzione che, ricevuti in ingresso un nome di file e una parola S,
restituisca il numero di occorrenze di S all'interno del file oppure -1 in caso
di errore nella gestione del file. La funzione opera sotto le seguenti condizioni:
una parola è una sequenza di caratteri priva di whitespace; un file è composto da
una sequenza di parole separate da whitespace; la ricerca delle occorrenze è di tipo
case insensitive.
*/

#include <iostream>
#include <cstring>

#define SIZE_LINE 1000+1

using namespace std;

int contaOccorrenzeParola(const char * nomeFile, char * parola);

int main(void) {
	char word[] = "the";
	
	cout << contaOccorrenzeParola("romanzo.txt", word);
	
	
	return 0;
}

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