Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
1

Подсчитать количество каждого символа

12.10.2019, 19:58. Показов 4886. Ответов 21

Author24 — интернет-сервис помощи студентам
В файле закодирован текст, необходимо подсчитать и вывести сколько раз встречается каждый символ(пробелы тоже)


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
#include<iostream>
#include <map>      // STL контейнер map
#include <cstdio>
#include <cstring>
#include <fstream>   //для работы с текстом
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    map <char, int> chars;// создаем контейнер
    map <char, int>::iterator begin, at, end;
 
    //char str[500];
    //cout << "Ввести строку:" << endl;
    ifstream file("4.txt");
 
    for (unsigned int i = 0; i < strlen(str); i++) {
        chars[str[i]]++;// считаем каждый символ
    }
 
    begin = chars.begin();
    end = chars.end();
    for (at = begin; at != end; at++) {
        cout << at->first << 't' << at->second << endl; // выводим результат
    }
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2019, 19:58
Ответы с готовыми решениями:

Подсчитать количество появлений каждого символа в файле
Написать программу, которая считывает текстовый файл и подсчитывает число появлений в нем каждого...

Подсчитать количество вхождений каждого символа в строку
например у Вас есть строка: asddsg В выходной файле, куда Вы запишите результаты работы программы...

Строка: После каждого символа А вставить пробел, и подсчитать количество символов B, стоящих между + и -
Помогите пожалуйста решить задачу. После каждого символа А вставить пробел, и подсчитать...

Подсчитать число вхождений каждого символа в файл
Дан символьный файл f Подсчитать число вхождений в файл каждой из букв a, b, c, d, e, f и вывести...

21
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
12.10.2019, 20:26 2
Цитата Сообщение от Rita87 Посмотреть сообщение
C++
1
2
3
4
ifstream file("4.txt");
for (unsigned int i = 0; i < strlen(str); i++) {
* * * * chars[str[i]]++;// считаем каждый символ
* * }
что-то странное )

Может, например, как-то так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    std::map<char, int> mmm;
 
    std::ifstream file("4.txt");
    if(file.is_open())
    {
        while( !file.eof() ) ++mmm[file.get()];
 
        file.close();
    }
 
    for(auto iter = mmm.begin(); iter!=mmm.end(); ++iter)
    {
        std::cout << iter->first << " : " << iter->second << "\n";
    }
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
12.10.2019, 20:37 3
Цитата Сообщение от Rita87 Посмотреть сообщение
В файле закодирован текст, необходимо подсчитать и вывести сколько раз встречается каждый символ(пробелы тоже)
C++
1
2
3
4
5
6
7
8
        size_t symbs[256] = {0};
        auto str = (std::stringstream() << std::ifstream("4.txt").rdbuf()).str();
        for (auto ch: str)
            ++symbs[ch];
 
        for (int  i = 0, n = std::size(symbs); i < n; ++i)
            if (symbs[i] != 0 && isprint(i))
                std::cout << char(i) << ": " << symbs[i] << std::endl;
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
12.10.2019, 21:06  [ТС] 4
почему-то не работает

Добавлено через 2 минуты
вы используете переменные, которых у меня нет
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
12.10.2019, 21:12 5
Цитата Сообщение от Rita87 Посмотреть сообщение
почему-то не работает
Добавлено через 2 минуты
вы используете переменные, которых у меня нет
Странно. Библиотеки те же, какие ошибки?
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
12.10.2019, 21:15  [ТС] 6
Цитата Сообщение от Folian Посмотреть сообщение
std::map<char, int> mmm;
std::ifstream file("4.txt");
* * if(file.is_open())
* * {
* * * * while( !file.eof() ) ++mmm[file.get()];
file.close();
* * }
for(auto iter = mmm.begin(); iter!=mmm.end(); ++iter)
* * {
* * * * std::cout << iter->first << " : " << iter->second << "\n";
* * }
здесь пустая консоль выводится

Добавлено через 1 минуту
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
size_t symbs[256] = {0};
* * * * auto str = (std::stringstream() << std::ifstream("4.txt").rdbuf()).str();
* * * * for (auto ch: str)
* * * * * * ++symbs[ch];
for (int *i = 0, n = std::size(symbs); i < n; ++i)
* * * * * * if (symbs[i] != 0 && isprint(i))
* * * * * * * * std::cout << char(i) << ": " << symbs[i] << std::endl;
А здесь

Ошибка C2065 ch: необъявленный идентификатор task1
Ошибка C3536 str: не может использоваться до инициализации task1
Ошибка C2027 использование неопределенного типа "std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>" task1
Ошибка C3312 не найдена вызываемая функция "begin" для типа "int" task1
Ошибка C3312 не найдена вызываемая функция "end" для типа "int" task1
Ошибка (активно) E0070 недопустимый неполный тип task1
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
12.10.2019, 21:16 7
Цитата Сообщение от kitsoRik Посмотреть сообщение
Странно. Библиотеки те же, какие ошибки?
Подозреваю "auto" ))

в моём без него, например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    std::map<char, int> mmm;
    std::map<char, int>::iterator iter;
 
    std::ifstream file("4.txt");
    if(file.is_open())
    {
        while( !file.eof() ) ++mmm[file.get()];
 
        file.close();
    }
 
    for(iter = mmm.begin(); iter!=mmm.end(); ++iter)
    {
        std::cout << iter->first << " : " << iter->second << "\n";
    }
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
12.10.2019, 21:21  [ТС] 8
Цитата Сообщение от Folian Посмотреть сообщение
std::map<char, int> mmm;
* * std::map<char, int>::iterator iter;
std::ifstream file("4.txt");
* * if(file.is_open())
* * {
* * * * while( !file.eof() ) ++mmm[file.get()];
file.close();
* * }
for(iter = mmm.begin(); iter!=mmm.end(); ++iter)
* * {
* * * * std::cout << iter->first << " : " << iter->second << "\n";
* * }
код ведь не изменился? У меня просто пустая консоль всплывает, без ошибок, но и без решения
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
12.10.2019, 21:21 9
Цитата Сообщение от Rita87 Посмотреть сообщение
здесь пустая консоль выводится
а где твой файл?
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
12.10.2019, 21:21  [ТС] 10
Цитата Сообщение от Folian Посмотреть сообщение
а где твой файл?
в папке с программой
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
12.10.2019, 21:23 11
Цитата Сообщение от Rita87 Посмотреть сообщение
код ведь не изменился?
чуток изменился, но раз запускается - это не та проблема была.

Добавлено через 1 минуту
Цитата Сообщение от Rita87 Посмотреть сообщение
в папке с программой
а такое запусти
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    std::map<char, int> mmm;
    std::map<char, int>::iterator iter;
 
    std::ifstream file("4.txt");
    if(file.is_open())
    {
        while( !file.eof() ) //++mmm[file.get()];
        std::cout << char(file.get());
        file.close();
    }
 
    for(iter = mmm.begin(); iter!=mmm.end(); ++iter)
    {
        std::cout << iter->first << " : " << iter->second << "\n";
    }
- тоже пустая будет?
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
12.10.2019, 21:25  [ТС] 12
Цитата Сообщение от Folian Посмотреть сообщение
- тоже пустая будет?
да
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
12.10.2019, 21:28 13
Цитата Сообщение от Rita87 Посмотреть сообщение
да
Штирлиц, где пастор Шлаг?

Проверяй файл, должен лежать рядом с .cpp, в котором main, должен быть не пустым, на всякий случай должен быть сохранён и закрыт.
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
12.10.2019, 21:29 14
Цитата Сообщение от Rita87 Посмотреть сообщение
А здесь
Ошибка C2065 ch: необъявленный идентификатор task1
Ошибка C3536 str: не может использоваться до инициализации task1
Просто подключи заголовки и всё
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <fstream>
#include <sstream>
int main()
{
    size_t symbs[256] = {0};
    auto str = (std::stringstream() << std::ifstream("D:\\4.txt").rdbuf()).str();
    for (auto ch : str)
        ++symbs[ch];
 
    for (int i = 0, n = std::size(symbs); i < n; ++i)
        if (symbs[i] != 0 && isprint(i))
            std::cout << char(i) << ": " << symbs[i] << std::endl;
}
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
12.10.2019, 21:31  [ТС] 15
Цитата Сообщение от Folian Посмотреть сообщение
стор Шлаг?


Р?С╪Р°С?Р?С?С'Р? Р°С?С╪Рч С?Р°Р?С?.
- РёР?Р?С?, - С?РёС'Р?С"Р?Р? Р·РёС?С?С?Р+РёС'Рё С?Р?Р?С?Р?Р°Р?Рё, - Р°С'РёС?С?С┼С?С? РёР?С?С?С?С?Р°С?Р+, Р+Р?Р? Р?С<
С?С?С'РёС?С?Рч!
- С┼Р?С'Р+С?, - С╪С?РёР·РёС' С?С?С"С?Р?Р°С╪С?С?С:. - Р?С? С?С?Р?С?, РС?Р?Р>РёС:Р?С?, С?С?С?, С?С?С?Рё С"Р?Р?
РР?Р°С?С?С?Р?; С"С?С?РчР?С? С╪Р+РёС╪Р?С'С?Р°С< С╪ Р?Р?Р°С<С┼ аиС?С?С┼ Р?Р?С╪РР?С?С?Р?Р?С┼.
- Р?Р?С?Рї Р?РёС?, С?Р?С?С┼С?С'С?Рї, - Р?Р?Р°С?Р+РёС'С? С'Р?С?С?, - С?С┼С?С?С┼, Р?С? Р?С╪Р?РёР°С?С┼ Р?С?С"С%, С?С?С?С┼ С╪
Р?Р?С"Р?Р?.
С'Р?С?РёС?С? С"С<С'С? РР?С?РёР?С<; С?С?С"С?Р?Р°С╪С?С?С: С╪С?С' С╪ Р?С?С?С?С?Р? Р° Р?С?С'С?Р?С? С? Р?РёР·Р?РёР+С?С' С?С┼
С┼С?С╪Р?Р?С┼ С╪Р°С?С?РёР?С?С% С?С?С╪Р?С?Р?С?Р°С╪С?С?Р? С?Р?Р>С?. РёР?Р?Р?Р? С?С?РёС?С?С' РР? С'Р?С?РёС?С%С┼, С? Р?Р?С? Р°С<С?Р?РёС'С? С╪Р?
С?Р°Р?С?Рё.
РР?С?Р?С%С'С╪С% Р°С?Р?С?С?. Р° Р?С?Р?С? С┼С?Р?С?Р?С? РС'РёС┼С% Р?С"Р?аиР?С?С'Р? Р°С?С╪Рч С?Р?С┼. С?С?РёС╪Р?С<С: С?С<С┼
Р°С?С'С╪С% Р?РёС? С?С?Р?Р°С'С?Р?. С╪Р?С?С?С'С< Р?С?С?Р>РёС'С?, С╪С<РРёС'С?С╪Рч, РС<С'РёР?Р>С?С? С"С?С?Р°Р?С< С╪Р?РёС'С? РРёС?РёР?Рч,
С?РёР·С?РёС'С╪С% С?РёС'Р?С"Р?С<С: Р°Р?РС'Рч С? С?С?С?С?С?: "Р?Р?С?С?С┼, РР?С┼Р?Р?С?Р?С?, РР?С┼Р?Р?С?Р?С?". - С?РёС? Р?С? Р?РёС?,


вот такое теперь
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
12.10.2019, 21:33 16
Цитата Сообщение от Rita87 Посмотреть сообщение
вот такое теперь
т.е. файл нашелся? Возвращаемся к первым вариантам, раз файл уже где надо)
1
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
12.10.2019, 21:35  [ТС] 17
Цитата Сообщение от Folian Посмотреть сообщение
т.е. файл нашелся? Возвращаемся к первым вариантам, раз файл уже где надо)
я? : 28
? : 125
' : 264
? : 391
" : 84
: : 55
┼ : 152
╪ : 256
? : 145
% : 94
? : 345
< : 95
? : 3
? : 229
? : 167
? : 45
° : 222
+ : 64
? : 464
? : 47
? : 83
ч : 72
 : 163
· : 98
ё : 380
№ : 2
є : 5
> : 11
? : 249
? : 218
? : 60
ї : 14
Р : 2152
С : 2478
я : 1

: 94
: 1294
! : 8
" : 6
, : 125
- : 93
. : 95
1 : 2
: : 4
; : 7
? : 11



Не распознаёт, буквы русские у меня
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
12.10.2019, 21:38 18
Цитата Сообщение от Rita87 Посмотреть сообщение
Не распознаёт, буквы русские у меня
Это уже ерунда, зато работает. Сейчас кину ссылку на страничку тут про кодировки в консоли.

Добавлено через 2 минуты
Русские шрифты в консоли
Тут в шапке разбираются разные варианты для кириллицы. Извиняюсь что ссылкой, но у тебя в начале уже было
Цитата Сообщение от Rita87 Посмотреть сообщение
C++
1
setlocale(LC_ALL, "rus");
- не работает чтоль?

Цитата Сообщение от Rita87 Посмотреть сообщение
С : 2478
это, наверное, большой файл?
1
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
12.10.2019, 21:40  [ТС] 19
Цитата Сообщение от Folian Посмотреть сообщение
не работает чтоль?
нет
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
12.10.2019, 21:45 20
Лучший ответ Сообщение было отмечено Rita87 как решение

Решение

Цитата Сообщение от Rita87 Посмотреть сообщение
нет
Проверь, для начала, на файле поменьше, но на латинице. Убедись что всё работает.
1
12.10.2019, 21:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2019, 21:45
Помогаю со студенческими работами здесь

Как подсчитать вероятность появления каждого символа в тексте.
Как подсчитать вероятность появления каждого символа в тексте. Например дана предложение: The...

Определить количество вхождений каждого символа
cout &lt;&lt; &quot;Введите строку: &quot;; cin.get(); getline(cin, str1); if (str1.empty() == true) {...

Посчитать количество вхождений в текст каждого символа
Нужна программа, которая считает количество вхождений в текст каждого символа. Вот мой код: ...

Определить количество вхождений каждого символа в строке
Помогите решить задачу! Вот условие: После ввода с клавиатуры произвольного строки выдать на...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru