Форум программистов, компьютерный форум CyberForum.ru

Определение количества символов в тексте - C++

Восстановить пароль Регистрация
 
Arctic Monkey
0 / 0 / 0
Регистрация: 09.05.2013
Сообщений: 3
09.05.2013, 17:50     Определение количества символов в тексте #1
Во входном файле text.txt содержится текст на английском языке.
Требуется написать программу, которая будет определять и выводить
на экран английскую букву, встречающуюся в этом тексте чаще всего,
и количество таких букв.Если искомых букв несколько, то программа
должна вывести ту из них,которая идет раньше по алфавиту.

Проблема в объявлении цикла проверки. ЧЯДНТ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{
    string text("");
    int num[26];
    int max = 0;
    char best;
    for(int i = 0; i < 25; i++)
        num[i] = 0;
    setlocale(LC_ALL, "Russian");
    ifstream fin("text.txt");
    if (!fin.is_open())
    {
        cout << "File isn't found." << endl;
        system("pause");
        return 0;
    }
    while (!fin.eof())
    {
        string tmp;
        fin >> tmp;
        text = text + tmp + " ";
    }
    for(char letter = 'z', int pos = 25; letter <= 'z'; letter--, pos--)     //цикл проверки
        for(int i = 0; text[i]; i++)
        {
            if(text[i] == letter)
                num[pos]++;
            if(num[pos] > max)
            {
                max = num[pos];
                best = letter;
            }
        }
    cout << "Английская буква, встречающаяся в этом тексте чаще всего, это" << best << "в количестве" << max << endl;
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
09.05.2013, 18:49     Определение количества символов в тексте #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <map>
#include <fstream>
 
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE, "");
    ifstream text("text.txt", ios::in);
    if (!text.good()) return -1;
    char c;
    map<char, unsigned> chars;
    do {
        c = text.get();
        if (isalpha(c))
            chars[c]++;
    } while (text.good());
 
    c = begin(chars)->first;
    unsigned max = begin(chars)->second;
 
    for (auto &m : chars)
        if ( m.second > max) {
            c = m.first;
            max = m.second;
        }
 
    cout << c << ' ' << max;
 
    text.close();
    return 0;
}
Arctic Monkey
0 / 0 / 0
Регистрация: 09.05.2013
Сообщений: 3
09.05.2013, 18:51  [ТС]     Определение количества символов в тексте #3
up!

Добавлено через 2 минуты
Olivеr, можно с комментариями, пожалуйста?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
09.05.2013, 18:59     Определение количества символов в тексте #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <map>
#include <fstream>
 
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE, ""); //локализация, она и не нужна тут
    ifstream text("text.txt", ios::in);//файл для чтения
    if (!text.good()) return -1;//если файл пустой или ошибка при открытии, то выход
    char c;
    map<char, unsigned> chars; //упорядоченная хеш-таблица символ-частота появления
    do {
        c = text.get(); //берем из файла символ
        if (isalpha(c)) //если буква
            chars[c]++; //если в хеш-таблице такой символ встречался раньше, то увеличить его частоту на 1, 
                        //если не встречался, то добавить новый символ и увеличить частоту на 1
    } while (text.good());//цикл пока есть что читать
 
    //в итоге получили хеш-таблицу с буквами и частотами, упорядоченную по алфавиту (a, b, c, d...)
    c = begin(chars)->first; //буква самой первой записи хеш-таблицы
    unsigned max = begin(chars)->second; //ее частота
 
    //находим запись с максимальной частотой
    //не забываем, что хеш-таблица упорядочена
    for (auto &m : chars)
        if ( m.second > max) {
            c = m.first;
            max = m.second;
        }
 
    cout << c << ' ' << max;
 
    text.close();
    return 0;
}
Arctic Monkey
0 / 0 / 0
Регистрация: 09.05.2013
Сообщений: 3
09.05.2013, 19:17  [ТС]     Определение количества символов в тексте #5
спасибо большое, Olivеr
Yandex
Объявления
09.05.2013, 19:17     Определение количества символов в тексте
Ответ Создать тему
Опции темы

Текущее время: 05:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru