Так что вам, в основном, нужно будет прочитать весь файл char-by-char. Предполагая, что вы знаете, как работает чтение файлов, вам нужно будет сделать что-то вроде (извините, я давно не делал C):
if (isalpha(ch)) {
count[ch-'a']++;
}
/* rest of code where char pointer is moved on etc. */
Для этого вам нужно будет импортировать библиотеку ctype:
#include <ctype.h>
** забыл упомянуть, предположил, что вы вывели бы следующее: ch - ваш указатель на текущий читаемый символ, а count [] - это int [], инициализированный для всех нулей с размером (26 * 2) = 52 для обслуживания как в верхнем, так и в нижнем регистре. Если прописные и строчные буквы должны обрабатываться одинаково, вы можете использовать функцию tolower (int c), также включенную в библиотеку ctype. В этом случае вам нужен только массив размером 26
.
if (isalpha(ch)) {
count[tolower(ch)-'a']++;
}
Тогда счет [] должен содержать счетчики для каждого символа.
/ * ***** * /
Если вы хотите сделать это только с библиотекой stdio.h, вы можете реализовать две функции, используемые из библиотеки ctype.h.
Простая реализация функции isalpha (int c) может выглядеть примерно так:
if (((int)c >= 'a' && (int)c <= 'z') || ((int)c >= 'A' && (int)c <= 'Z') {
return TRUE;
} else {
return FALSE;
}
(где TRUE и FALSE имеют тип вашего возвращаемого типа и что-то, что вы определили).
И действительно простая версия tolower может выглядеть примерно так:
if ((int)c >= 'A' && (int)c <= 'Z') {
return (int)c - 'a';
} else {
return (int)c;
}
Возможно, вы могли бы обойтись без всех приведений ...