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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
ForestG
33 / 33 / 3
Регистрация: 21.11.2009
Сообщений: 201
#1

Чтение из потока буковок:) - C++

09.12.2009, 20:21. Просмотров 1685. Ответов 7
Метки нет (Все метки)

Задание:
Дан файл, содержит текст, набранный заглавными русскими буквами.
Провести частотный анализ текста, т.е указать (в процентах), сколько раз встречается та или иная буква.

Что делаю:
1. Создаю текстовый файл "БУКОВКИ.txt" в нем пишу слитно буквы AБВГДЕЖЗАААФФ
2. Пытаюсь прочесть через поток ifstream in1("БУКОВКИ.txt",ios::in);
3. Потом делаю проверку в вложенном цикле сколько одинаковых букв, с помощью bukovki++;
4. Ну и записываю число совпадений в dop[i]

А вот немного не получается с выходом !!!!

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <conio.h>
#include <fstream>
 
using namespace std;
int main()
 
 
{setlocale( LC_ALL,"Russian" );//для русского шрифта в консоли
 
char buk[80];
int dop[80];
int k=0,bukovki=0;
int i=0,j=0,z=0;
 
 
ifstream in1("БУКОВКИ.txt",ios::in);
 
    if(!in1)
    {
        cout<<" Нельзя прочесть файл!\n";
    }
 
    cout<<"Исходный файл содержит:";
    
    for(int i=0;i<=80;i++)  
        {       
        
        in1>>buk[i];
        cout<<buk[i-1];
        k=k+1;//Общее кол-во букв в потоке
    
            if(in1=='\0')
            {
                break;  
            }
        
 
        }
cout<<"\n\n";
 
 
/////////Кол-во совпадений///////////
z=0;
    for(int i=0;i<k-1;i++)
        {
            bukovki=0;
 
            for(int j=0;j<k-1;j++)
                    
            if(buk[i]==buk[j])
            {       
                z=i;
                bukovki++;
            
                dop[i]=bukovki;
            }
 
            cout<<i+1<<") Буква "<<buk[i]<<" встречается "<<dop[z]<<" раз ";
            cout<<"\n";
        }
 
    cout<<"\n";
 
cout<<"Общее кол-во букв ="<<k-1;
 
 
in1.close();
 
    
 
_getch();
    return 0;
}
Миниатюры
Чтение из потока буковок:)  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2009, 20:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение из потока буковок:) (C++):

Чтение строк из потока - C++
Доброго времени суток всем! Вопрос мой заключается в том, правильно ли я понял суть задания. Мне нужно создать класс, который сможет...

Чтение из потока в вектор и в struct - C++
Читаю книгу Accelerated C++. Книга старая и использует позапрошлую версию С++. Автор приводит следующий пример: struct Student_info { ...

Чтение файла из входного потока - C++
есть код в нем есть путь к файлу, как мне сделать так чтоб я не писал путь к файлу а данные считывались при если допустим я запущу вот так...

чтение строки как потока - C++
Если у меня в текстовом файле (ifstream &amp;fin) хранится какая-то последовательности n чисел, то я читаю её например так: for(int...

Чтение числа из потока и обработка ошибок - C++
Есть поток. Из потока читается число. При чтении происходит сбой. Как узнать что конкретно сбойнуло (число слишком большое/это не число/в...

Cin, чтение с конца полученного потока - C++
Происходит ввод с клавиатуры последовательности чисел разделенных пробелами, нужно извлечь из этого потока последнее значение. Как?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForestG
33 / 33 / 3
Регистрация: 21.11.2009
Сообщений: 201
09.12.2009, 20:23  [ТС] #2
А мне нужно просто что буква А - столько процентов, Б-столь ну и т.д
Вот сидел голову ломал наверное целый день сегодня
M128K145
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
09.12.2009, 20:46 #3
ForestG, создаешь массив на 256 элементов, проходишь в цикле свою строку и увеличиваешь тот элемент массива индекс которого равен коду символа
C++
1
++dop[(int)buk[i]];
ForestG
33 / 33 / 3
Регистрация: 21.11.2009
Сообщений: 201
09.12.2009, 21:02  [ТС] #4
Спасибо конечно, но мне не понятно...

Добавлено через 3 минуты
1. Почему именно на 256 создавать массив надо
2. почему массив с типом char мне надо принудительно, поменять тип на int
3. и где мне бегать в цикле с проверкой?
M128K145
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
09.12.2009, 21:08 #5
Цитата Сообщение от ForestG Посмотреть сообщение
1. Почему именно на 256 создавать массив надо
Потому что в байт влазит максимум 256
Цитата Сообщение от ForestG Посмотреть сообщение
2. почему массив с типом char мне надо принудительно, поменять тип на int
Явное приведение типа - получение кода символа
Цитата Сообщение от ForestG Посмотреть сообщение
3. и где мне бегать в цикле с проверкой?
Тебе бегать не надо, ты будешь сидеть, а программа выполнятся))
Сразу как только считал весь нужный текст - ставь это в цикле
ForestG
33 / 33 / 3
Регистрация: 21.11.2009
Сообщений: 201
09.12.2009, 21:16  [ТС] #6
Я видимо нифига не шарю в кодах символов.
Но помоему мне не нужно, в этой задачи углубляться в коды, символов.

Мне просто нужно прочитать из потока буковки, что я и сделал, а теперь я их просто хочу подсчитать...

Возможно я не прав, потому что Noob
M128K145
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
09.12.2009, 22:17 #7
ForestG, смысл вот в этом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main()
{
    char* str = "aSGdhhs htd thsg dthjf hsrh rdt jdrtjftjdf tjdr f";
    std::cout<<"Sentence:\n"<<str<<"\n\nResult:\n";
    int symb[256]={ 0 };
    size_t i, len = strlen(str);
    for(i = 0; i < len; ++i)
        ++symb[(int)str[i]];
    for (i = 0; i < 256; ++i)
        if(symb[i] != 0)
            std::cout<<"Character "<<(char)i<<" meets with frequency "<<(double)symb[i]/len<<std::endl;
    std::cin.get();
    return 0;
}
ForestG
33 / 33 / 3
Регистрация: 21.11.2009
Сообщений: 201
09.12.2009, 22:18  [ТС] #8
Пипец мне в этом месяц разбираться

Добавлено через 40 секунд
Спасиб
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2009, 22:18
Привет! Вот еще темы с ответами:

посчитать количество буковок(5,10,20) которых я нажал и записать в файл суму нажатий.. - C++
Есть клавиатура нужно посчитать количество буковок(5,10,20) которых я нажал и записать в файл суму нажатий, но программа должна быть в трее.

Вызывть метод одного потока из другого потока - C++
Здравствуйте, подскажите пожалуйста, как можно реализовать такую штуку : есть один поток(1), который вызывает метод у обьекта, этот...

Создание потока из потока. - C++
Надо создать поток 1, в нем создать поток 2, сам я жуткий дураг, немаловероятно что правильного в коде вообще ничего нет ) ругается...

Два потока, две очереди, два потока - C++
Есть две очереди. Каждая из них заполняется своим потоком. Есть два потока, которые достают данные из своей очереди. Но когда одна из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.12.2009, 22:18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru