Как я мог бы выполнить частотный анализ строки без использования переключателя

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

Вопрос

Я работаю над школьным проектом по внедрению кода Хаффмана в текст.Первая часть курса требует частотного анализа текста.Есть ли лучший способ, помимо гигантского коммутатора и множества счетчиков, сделать это?

ie:

int[] counters

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

Я хотел бы использовать все буквенно-цифровые символы и знаки препинания.Я использую c ++.

Это было полезно?

Решение

Почему бы и нет:

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;

Другие советы

Вы можете использовать массив, индексированный по символу:

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

Вы также захотите инициализировать свой counters массив равен нулю, конечно.

использование карты кажется вполне применимым:

map<char,int> chcount;
for(int i=0; i<inString.length(); i++){
  t=inString[i];
  chcount[i]? chcount[i]++ : chcount[i]=1;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top