Бинарные файлы: Подсчитать количество вхождений в файл каждой из букв а, b, c, d, e, f - C (СИ)
Формулировка задачи:
Здарствуйте уважаемые форумчани!! Помогите , как сделать с текстового файла -бинарный. Условие задачи:Дано символьный файл. Подсчитать количество вхождений в файл каждой из букв а, b, c, d, e, f и вывести результат отдельными строками.
Вот я написал код , но я там сделал с помощью текстовых,а не бинарных.Помогите , как можно переделать в бинарный?
#include"stdafx.h"
#include <stdio.h>
#define SIZE 6
#define avfgg "text.txt"
int main(void)
{FILE *fp = fopen(avfgg, "r");
char c;
int i, all[SIZE] = {0};
if (!fp) return 1;
while ((c = fgetc(fp)) != EOF) // пока считали символ в переменную с и он оказался не символом конца файла
if (c >= 'a' && c <= 'f') // если символ лежит в диапазоне [a, f]
all[c - '0' - 49]++; // в массиве all с индексом, равным значению этой переменной в коде ASCII - 49 (начиная с 49 символа идут малые латинские буквы)
for (i=0; i < SIZE; i++) // от начала до конца массива
printf("%c-%d\n", i + 49 + '0', all[i]); // выводим содержимое на экран. i + 49 - номер символа по таблице ASCII. Добавление '0' преобразует int в char
return 0;
}
Что никто не может помочь?
Решение задачи: «Бинарные файлы: Подсчитать количество вхождений в файл каждой из букв а, b, c, d, e, f»
textual
Листинг программы
#include<stdio.h>
int main()
{
FILE *f;
int count[256] = {0};
char i;
if ((f = fopen("c:\\a.txt", "rb")) == NULL)
return 1;
while(fread(&i, sizeof(i), 1, f))
++count[i];
fclose(f);
for(i = 'a'; i <= 'f'; i++)
printf("%c: %d\n", i, count[i]);
return 0;
}
Объяснение кода листинга программы
Выполняемый код с комментариями:
- #include
— подключаем стандартную библиотеку для работы с консолью - int main() — функция main(), с нее начинается выполнение любой программы на C
- *FILE f;* — объявляем переменную типа FILE, которая будет использоваться для работы с файлами
- int count[256] = {0}; — объявляем массив count размером 256 байтов, и инициализируем все его элементы нулями
- char i; — объявляем переменную типа char, которая будет использоваться для хранения символов
- if ((f = fopen(
c:\\a.txt,rb)) == NULL) — открываем файлc:\\a.txtв бинарном режиме с помощью функции fopen(), и сохраняем указатель на файл в переменную f. Если файл не удалось открыть, то возвращаем 1 - while(fread(&i, sizeof(i), 1, f)) — читаем файл по одному символу за раз с помощью функции fread(), и сохраняем символ в переменную i. Функция fread() возвращает ненулевой значение, пока есть данные для чтения
- ++count[i]; — увеличиваем значение элемента массива count, соответствующего символу i, на единицу
- fclose(f); — закрываем файл с помощью функции fclose()
- for(i = 'a'; i <= 'f'; i++) — выполняем цикл по символам от 'a' до 'f'
- printf(
%c: %d\n, i, count[i]); — выводим на консоль количество вхождений символа i в файл, используя функцию printf() - return 0; — завершаем выполнение функции main(), возвращая ноль. Программа успешно завершилась, если значение, возвращаемое функцией main(), равно нулю.