Подсчет частоты символов в файле. Переполнение стека

Задача состоит в том, чтобы напечатать (заданный текстовый файл) встречающиеся латинские символы, используя таблицу частот (без различия между заглавными и строчными буквами), в файл f1. Таблица должна быть отсортирована по алфавиту.
Пока что моя программа считает только букву А. У меня проблемы с созданием циклов, которые проходят по всему алфавиту и распечатывают таблицу в другой файл, не могли бы вы помочь мне с этим?

#include <stdio.h>
const char FILE_NAME[] = "yo.txt";
#include <stdlib.h>
#include <iostream>
using namespace std;
int main() {
int   count = 0;  /* number of characters seen */
FILE  *in_file;    /* input file */

/* character or EOF flag from input */
int             ch;

in_file = fopen(FILE_NAME, "r");
if (in_file == NULL) {
printf("Cannot open %s\n", FILE_NAME);
system("Pause");
exit(8);
}

while (1) {
char cMyCharacter = 'A';
int value = (int)cMyCharacter;
ch = fgetc(in_file);
if (ch == EOF){
break;
}
int file_character = (int) ch;
if (file_character == value || file_character == value+ 32) {
count++;
}
}

printf("Number of characters in %s is %d\n", FILE_NAME, count);
char cMyCharacter = 'A';
int iMyAsciiValue = (int)cMyCharacter;
cout << iMyAsciiValue;
system("Pause");
fclose(in_file);

return 1;
}

0

Решение

Во-первых, получить массив размером 26 для частот от а до я

int freq[26] = {0};

freq[0] для’, freq[1] для «б» и т. д.

Во-вторых, изменить

if (file_character == value || file_character == value+ 32)

в

if (file_character >= 'a' && file_character <= 'z')

для всех строчных букв (то есть от ‘a’ до ‘z’).

В-третьих, получить индекс и считать

freq[file_character - 'a']++;

, file_character - 'a' вычисляет индекс, а остальное действительно считает.

В-четвертых, распечатайте freq массив.

В-пятых, добавить

else if (file_character >= 'A' && file_character <= 'Z')

для заглавных букв и соответственно измените последующие коды.

Это ваша домашняя работа, вы должны попытаться выяснить всю программу самостоятельно. Я надеюсь, что этот ответ даст вам достаточно подсказок.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]