2014-02-17 5 views
0

Я пытаюсь прочитать частоту из файла, чтобы создать дерево хаффмана. Я могу это сделать, но есть проблема. Проблема в том, что я использую два for() loops i and j и в том месте, где повторяется алфавит в этом месте, он показывает «0». Я имею в виду предположу, что алфавит "aababccc" выход заключается в следующем:Частота повторяющихся алфавитов вычисляется неправильно

a=3,a=0,b=2,a=0,b=0,c=3,c=0,c=0 

, но я хочу выхода быть таким:

a=3, b=2,c=3 

Я имею в виду, я должен удалить эти нули из распределения памяти я сделал . (я храню их в симво [] и частота []) Пожалуйста, помогите мне в этом, что (любой язык с или с ++)

int flag[256]; 
    int j = 0; 
    char sym[256]; 
    int freq[256]; 
    for (i = 0; i < count; i++) 
     flag[i] = {0}; 
    int fcount1 = 0; 
    sym[i] = data[i].symbol; 
    freq[i] = fcount1; 
     fcount1 = 0; 
    } 

} 

Входная частота дается ему являются: abaab bcacaeeded которые хранятся в данных [индекс] .symbol И выход, соответствующий к нему:

Все правильно, кроме этих «0». Пожалуйста, помогите мне удалить эти «0».

+0

Это неполный код справа? есть что-то выше этого кода тоже. Я прав? –

+0

@DakshShah вот полный код. Спасибо за точку – Sss

ответ

0

Просто перед циклом j, добавить условие:

if (flag[i] == 0) 

Кроме того, строить storesym и storefreq массивы динамически с использованием векторов и push_back

int flag[256];//this flag is to know if the alphabet is already counted or not.If counted that i set it to "1" other wise it is "0".Please see below in my code 
int j = 0,i; 
std::vector<char> storesym; 
std::vector<int> storefreq; 
for (i = 0; i < count; i++) 
    flag[i] = {0}; 
int fcount1 = 0; 
for (i = 0; i < count; i++) 
{ 
    if (flag[i] == 0) 
    { 
     for (j = i; j < count; j++) 
     { 
      if (data[i].symbol == data[j].symbol && flag[j] == 0) 
      { 
       fcount1++; 
       flag[j] = 1;//**I am setting flag to 1 those alphabets to 1 so that they will not be counted again on next iteration** 
      } 
     } 
     storesym.push_back(data[i].symbol); 
     storefreq.push_back(fcount1); 
    } 
    fcount1 = 0; 
} 
cout << endl; 
for (i = 0; i < storesym.size(); i++) 
{ 
    cout << "storesym[i] :" << storesym[i] << endl;//it stores the symbol. 
    cout << "storefreq[i] :" << storefreq[i] << endl;//it stores the frequency. 
} 
+0

Как сделать std :: vector storesym; std :: vector storefreq; в c? – Sss

+1

@ user234839 вы используете заголовки C++ (iostream и fstream), а не C. Вам нужно будет #include . –

+0

спасибо за помощь, позвольте мне попробовать, если вы выиграете, я проголосую за вас. – Sss

0

Просто проверьте, если это 0 или нет , if it '0' не хранить его

Смежные вопросы