Como eu poderia fazer a análise de frequência em uma string sem usar um interruptor
-
23-09-2019 - |
Pergunta
Estou trabalhando em um projeto escolar para implementar um código Huffman no texto. A primeira parte do claro requer uma análise de frequência no texto. Existe uma maneira melhor além de um interruptor gigante e de uma variedade de contadores para fazer isso?
ou seja:
int[] counters
for(int i = 0; i <inString.length(); i++)
{
switch(inString[i])
case 'A':
counters[0]++;
.
.
.
Eu gostaria de fazer todos os personagens alfa-numéricos e pontuação. Estou usando C ++.
Solução
Por que não:
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;
Outras dicas
Você pode usar uma matriz indexada pelo caractere:
int counters[256];
for (int i = 0; i < inString.length(); i++) {
counters[(unsigned char)inString[i]]++;
}
Você também vai querer inicializar seu counters
Array a zero, é claro.
Usar um mapa parece completamente aplicável:
map<char,int> chcount;
for(int i=0; i<inString.length(); i++){
t=inString[i];
chcount[i]? chcount[i]++ : chcount[i]=1;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow