Другие языки программирования и технологии

Написать программу которая подсчитывает частоту встречаемости символов в заданном текстовом файле С++

На вход программе подается имя входного текстового файла input.txt
На выход в выходной файл output.txt вывести вещественное число - отношение количества вхождений этого символа в данный файл к длине всего файла

Помогите додумать этот код C++:

#include <stdio.h>
#include <stdlib.h>
int main()
{
int mas[256];
FILE*f;
char symbol;
int i,j;
f=fopen("input.txt","r");
for (i=0;i<255;i++)
mas=0;
puts(f);
int k=strlen(f);
for (i=0;i<255;i++)
for (j=0;j<k;j++)>=mas[j])
{
mas[symbol]++;
}
fclose(f);
for (i=0;i<255;i++)
{
if (mas>0) //где то тут должно быть написано f2=fopen("output.txt","w"); и записано значение отношения
printf( символ, кол-во)
}
return 0;
}
> #include <stdio.h>
> #include <stdlib.h>
Что-то у вас тут совсем не С++

#include <map>
#include <fstream>

using namespace std;

int main() {
    ifstream in("input.txt", ios::binary);
    map<unsigned char, int> s;
    char c;
    int n = 0;
    while (in.get(c)) {
        ++s[c]; ++n;
    }
    ofstream out("output.txt");
    for (map<unsigned char, int>::iterator i = s.begin(); i != s.end(); ++i) {
        if (i->first < 32) {
            out << "0x" << hex << static_cast<unsigned>(i->first);
        } else {
            out << "'" << i->first << "'";
        }
        out << " - " << static_cast<double>(i->second) / n << endl;
    }
    return 0;
}

или без использования map

#include <fstream>

using namespace std;

int main() {
    ifstream in("input.txt", ios::binary);
    int s[256] = { 0 };
    char c;
    int n = 0;
    while (in.get(c)) {
        ++s[c]; ++n;
    }
    ofstream out("output.txt");
    for (int k = 0; k < 256; ++k) {
        if (s[k] != 0) {
            if (k < 32) {
                out << "0x" << hex << k;
            } else {
                out << "'" << static_cast<char>(k) << "'";
            }
            out << " - " << static_cast<double>(s[k]) / n << endl;
        }
    }
    return 0;
}
Виталий Грызлов
Виталий Грызлов
89 057
Лучший ответ

Похожие вопросы