0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 15
|
|
1 | |
Подсчитать сколько раз встречается каждый байт файла15.02.2015, 19:36. Показов 4300. Ответов 19
Метки нет (Все метки)
Прога открывает любой файл, в нем считывает общее количество байт. А далее начинается самое интересное, нужно организовать подсчет частоты встречи каждого байта исходного файла и вывод статистики в другой файл.
У меня совсем нет идей, главным образом не знаю как правильно идентифицировать эти байты, чтобы начинать их сравнивать между собой и как организовать цикл с подсчетом. Пробовал делать быдлоком из 256 счетчиков и сравнений через символы, но MS Visual Studio испытывает проблемы со считыванием символов ASCII и совсем не хочет воспринимать символы ☺☻♥. Выручайте.
0
|
15.02.2015, 19:36 | |
Ответы с готовыми решениями:
19
Подсчитать сколько раз встречается каждый символ в текстовом файле Строка: В заданной строке подсчитать, сколько раз встречается символ “*” и сколько раз символ ”+”. Посчитать сколько раз встречается каждый элемент в массиве. Определить сколько раз встречается в тексте каждый символ |
Ушел с форума
|
|
15.02.2015, 19:43 | 2 |
0
|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
||||||
15.02.2015, 19:49 | 3 | |||||
Ну например так:
http://ideone.com/nMorGB Вам останется только заполнять вектор чисел элементами.
0
|
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
|
|
15.02.2015, 19:53 | 4 |
Разве эти символы в древних кодировках есть?
0
|
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 15
|
|
15.02.2015, 20:10 [ТС] | 5 |
эти символы, это лично мой застеб, потомучто я не знаю как правильно идентифицировать байт. Я пытался идентифицировать байт как один символ. И смотреть если символ встретился то к счетчику прибавляю единицу. Это работает для всех символов, кроме ☺ ☻ ♥и подобных, потому что VS начинает ругаться и не понимает что за ерунду я ввел.
выдает ошибки: (7) : error C2143: syntax error : missing ',' before ':' (7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (7) : error C2143: syntax error : missing ';' before '{' (21) : error C2552: 'bytes' : non-aggregates cannot be initialized with initializer list 1> 'std::vector<_Ty>' : Types with a base are not aggregate 1> with 1> [ 1> _Ty=unsigned char 1> ]
0
|
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
|
|
15.02.2015, 20:21 | 6 |
Ты как файл читаешь?
0
|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
|
15.02.2015, 20:21 | 7 |
Для компиляции требуется поддержка c++11 ( флаг -std=c++11 ) должен помогать.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
|
||||||
15.02.2015, 20:36 | 8 | |||||
например в 0 ячейке количество 0 в 5 количество пятерок Добавлено через 4 минуты маленькое уточнение с должна быть объявлена как unsigned char
0
|
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 15
|
|||||||||||
15.02.2015, 21:15 [ТС] | 9 | ||||||||||
Вот эту прогу я использую для считывания байт с файла, писал не я но примерно понимаю как она работает. Если посмотреть отдельные значения буфера, там видно символы, записанные в файл. Но блин как сравнить значение одного байта с другим я не знаю. Пробовал с помощью цикла while и внутри него использовать if и сравнение символа.
0
|
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
|
||||||
15.02.2015, 21:23 | 10 | |||||
Сообщение было отмечено xzickx как решение
Решение
Вот частоты:
1
|
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 15
|
|
15.02.2015, 21:44 [ТС] | 11 |
есть правда один вопрос. в файле у меня вбито: 123456712345671234567 (44 байта) прога насчитывает 21 повторение какого-то байта. Это байт Null ? Добавлено через 2 минуты я наверное туплю совсем и байт не совсем тоже самое что и символ?
0
|
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
|
|
15.02.2015, 21:57 | 12 |
Файл текстовый? То, что ты показал - 21 символ и 21 байт. Почему 44 я не понял.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
|
|
15.02.2015, 22:00 | 13 |
по размеру одно и тоже но не все значения есть символы
смотри кодировку например https://ru.wikipedia.org/wiki/ASCII скорее всего юникоде кодировка, символ состоит из двух байт от языка зависит
0
|
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
|
|
15.02.2015, 22:01 | 14 |
А, ну да кодировка может влиять. Тогда интерпретировать в символах бессмысленно, только в кодах.
0
|
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 15
|
|
15.02.2015, 22:08 [ТС] | 16 |
Файл текстовый, 44 байта показывает виндоус в свойствах файла, и столькоже насчитывает прога. после вашего цикла for вставил
Код
while (c<256) { std::cout<< "f["<<c<< "]=" << f[c] << " "; c++; } Теперь понятно что с символами совсем фигово все. Всем спасибо, буду дальше дорабатывать код. =) а все потому что у текстового файла стояла кодировка unicode
0
|
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
|
|
15.02.2015, 22:16 | 18 |
Юникод - это хорошо. Просто определись, байты считаешь или символы. Если второе, то и считывать надо символы.
0
|
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 15
|
|
15.02.2015, 22:23 [ТС] | 19 |
нужно байты, поэтому все норм
0
|
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
|
|
15.02.2015, 22:26 | 20 |
Ну тогда хорошо. Выводи результат в виде (код - количество).
0
|
15.02.2015, 22:26 | |
15.02.2015, 22:26 | |
Помогаю со студенческими работами здесь
20
Посчитать сколько раз каждый элемент встречается в массиве Определить сколько раз встречается в тексте каждый символ Посчитать сколько раз встречается каждый символ строки в мапе Определить, сколько раз в строке встречается каждый из символов алфавита Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |