Come potrei fare analisi della frequenza su una stringa senza utilizzare un interruttore
-
23-09-2019 - |
Domanda
Sto lavorando un progetto scolastico per implementare un codice di Huffman sul testo. La prima parte del corso richiede un'analisi di frequenza sul testo. C'è un modo migliore a parte un interruttore gigante e una serie di contatori per farlo?
vale a dire:
int[] counters
for(int i = 0; i <inString.length(); i++)
{
switch(inString[i])
case 'A':
counters[0]++;
.
.
.
Mi piacerebbe fare tutti i caratteri alfanumerici e segni di punteggiatura. Sto usando C ++.
Soluzione
Perché non:
int counters[256] = {0};
for(int i = 0; i <inString.length(); i++)
counters[inString[i]]++;
}
std::cout << "Count occurences of \'a\'" << counters['a'] << std::endl;
Altri suggerimenti
È possibile utilizzare un array indicizzato per carattere:
int counters[256];
for (int i = 0; i < inString.length(); i++) {
counters[(unsigned char)inString[i]]++;
}
Si vuole anche per inizializzare l'array counters
a zero, ovviamente.
utilizzando una mappa sembra del tutto pertinente:
map<char,int> chcount;
for(int i=0; i<inString.length(); i++){
t=inString[i];
chcount[i]? chcount[i]++ : chcount[i]=1;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow