School-Coding-Cpp/sfusi/es18_occorrenze_foschini_fi...

61 lines
1.3 KiB
C++

/*
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;
}
}