Skip to content

Instantly share code, notes, and snippets.

@vittodevit
Created December 3, 2020 08:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vittodevit/4c1e4c756c5fef8935d180f65498484d to your computer and use it in GitHub Desktop.
Save vittodevit/4c1e4c756c5fef8935d180f65498484d to your computer and use it in GitHub Desktop.
Conta tutte le lettere maiuscole, minuscole ed altro in un file di testo
#include <iostream>
#include <fstream>
#include <sstream>
#include <cstring>
using namespace std;
//nessun menù, solo funzione di contatore, si presuppone che il menù salvi le righe di testo in un file
int main(){
ifstream ifs ("testo.txt", ifstream::in); //apertura file di testo
string buffer; //stringa di buffer
int contatori[53] = {0}; //inizializziamo un array di contatori (2x l'alfabeto + cella extra + padding)
//per ogni riga del file
while(getline(ifs, buffer)){
int len = buffer.length(); //ottieni la lunghezza
char bufc[len+1]; //crea un array della lunghezza del buffer +1 di padding
strcpy(bufc, buffer.c_str()); //copia il buffer nel buffer array di caratteri
//per tutti i caratteri nell'array
for (char c : bufc){
//se i caratteri sono maiuscoli (codice ascii)
if(c > 64 && c < 91){
contatori[c-65]++; //incrementa la cella dell'array che corrisponde alla lettera dell'alfabeto (valore ascii - 65)
}
//se la lettera è maiuscola
else if(c > 96 && c < 123){
contatori[c-71]++; //incrementa la cella dell'array che corrisponde alla lettera dell'alfabeto (valore ascii - 71)
}
//se è un altro carattere
else{
contatori[52]++; //incrementa ultima cella
}
}
}
//per tutti i contatori
for(int i=0; i<53; i++){
//se corrisponde ad un contatore maiuscolo
if(i < 26){
char curr = i + 65; //ottieni il valore ascii originale prendendo l'indice ed aggiungendo 65
cout << "Per il carattere '" << curr << "' sono state trovati " << contatori[i] << " risultati" << endl; //messaggio console
}else if(i > 25 && i < 52){
char curr = i + 71; //ottieni il valore ascii originale prendendo l'indice ed aggiungendo 71
cout << "Per il carattere '" << curr << "' sono state trovati " << contatori[i] << " risultati" << endl;
}else{
cout << "Per tutti gli altri caratteri sono stati trovati " << contatori[52] << " risultati" << endl; //tutto il resto
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment