/*
AUTORE: Manuel Vichi
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>
#include <cctype>
using namespace std;
int searchWord(const char * fileName, const char * word) {
	FILE* file = fopen(fileName,"r");
	unsigned occorrenze = 0;
	if (file != NULL) {
		char buffer[256];
		char wordModified[256];
		for (size_t i = 0; i < strlen(word); i++) {
			if (!isupper(word[i])) {
				wordModified[i] = toupper(word[i]);
			}
			else {
				wordModified[i] = word[i];
			}
		}
		while(fgets(buffer,sizeof(buffer),file)) {
			for (size_t i = 0; buffer[i] != '\0'; i++) {
				if (isalpha(buffer[i]) && !isupper(buffer[i])) {
					buffer[i] = toupper(buffer[i]);
				}
			}
		}
		fclose(file);
		return occorrenze;
	}
	else {
		perror("Errore durante l'apertura del file");
		return -1;
	}
	return -1;
}
int main(void) {
	cout << "Occorrenze: " << searchWord("occorrenze.txt","parola") << endl;
	return 0;
}
