Advertisement
Guest User

Untitled

a guest
Jan 24th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <Windows.h>//для SetConsoleCP()
  4. using namespace std;
  5. int main()
  6. {
  7. setlocale(0, "rus");
  8. string s;
  9. cout << "Введите строку: ";
  10. SetConsoleCP(1251);
  11. getline(cin, s);//считываем строку до ввода Enter
  12. SetConsoleCP(866);
  13. int len = s.length();//храним первоначальную длину строки
  14. float H = 0;//энтропия
  15. while (s != "")//пока строка не пустая
  16. {
  17. int N = 1;//количество символов, равных s[0]
  18. for (int i = 1; i < s.length(); i++)//пробегаем оставшиеся символы
  19. if (s[i] == s[0]) {//если встретили равный s[0]
  20. N++;//увеличиваем N
  21. s.erase(i, 1);//удаляем s[i] из строки (метод erase удаляет 1 символ, начиная с i)
  22. i--;//т.к. мы убрали букву на i-м месте, то на её место встала другая. чтобы её обработать, мы специально уходим влево на 1
  23. }
  24. float p = (float)N / len;//вероятность
  25. H += p * log2f(1 / p);//увеличиваем энтропию (прибавляем значение для буквы, стоящей на нулевом месте)
  26. s = s.erase(0, 1);//удаляем из строки s[0]
  27. //cout << s << endl;
  28. }
  29. cout << "Энтропия равна " << H << endl;
  30. system("pause");
  31. return 0;
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement