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 ++.

Foi útil?

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
scroll top