¿Cómo podría hacer análisis de frecuencia en una cadena sin necesidad de utilizar un conmutador

StackOverflow https://stackoverflow.com/questions/2350056

Pregunta

Estoy trabajando un proyecto escolar para implementar un código de Huffman en el texto. La primera parte del curso requiere un análisis de frecuencia en el texto. ¿Hay una mejor manera, aparte de un interruptor gigante y un conjunto de contadores de hacerlo?

es decir:

int[] counters

for(int i = 0; i <inString.length(); i++)
{
switch(inString[i])
    case 'A':
    counters[0]++;
.
.
. 

Me gustaría hacer todos los caracteres alfanuméricos y puntuacion. Estoy usando C ++.

¿Fue útil?

Solución

¿Por qué no:

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;

Otros consejos

Se puede utilizar una matriz indexada por caracteres:

int counters[256];
for (int i = 0; i < inString.length(); i++) {
    counters[(unsigned char)inString[i]]++;
}

También tendrá que inicializar la matriz counters a cero, por supuesto.

usando un mapa parece totalmente aplicable:

map<char,int> chcount;
for(int i=0; i<inString.length(); i++){
  t=inString[i];
  chcount[i]? chcount[i]++ : chcount[i]=1;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top