1

Тема: Підрахувати кожну з літер алфавіту

Є текст  потрібно порахувати кожну с літер алфавіту та вивести на екран результати ,потрібно відсортувати ці літери таким чином  записати символ за спаданням, тобто символ який найчастіше з'являвся 1 і т.д.Ось те що намагалася робити я

#include <iostream>
#include <string>
#include <fstream>
 
#include <cctype> 
#include <map>
using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");
    char ch;
ifstream in("E:\\1.txt"); 
 
    map <char, int> m;
 
    while (in.get(ch))
    {
        if (isupper(ch)) ch = tolower(ch);
        if (isalpha(ch)) m[ch]++;
    }
    
 
    for (auto i = m.begin(); i != m.end(); i++)
        
        cout << i->first << "->" << i->second << "\n";
 
   
    system("pause");
    return 0;
}

2

Re: Підрахувати кожну з літер алфавіту

І що вас невлаштовує у вашому ж коді?

3

Re: Підрахувати кожну з літер алфавіту

Дуже складний для мене можна його якось легше написати,і цей код чомусь не читає українську мову тільки англійську

4

Re: Підрахувати кожну з літер алфавіту

Дуже складний для мене можна його якось легше написати,

То код писали ви чи не ви? Якщо код писали ви і ви кожен рядок кода розумієте, то в чому проблема? А якщо не розумієте самі що понаписували, тоді навіщо це було писати?

і цей код чомусь не читає українську мову тільки англійську

Для того, щоби код читав українську, ви маєте зберегти текстовий файл в кодовій сторінці CP866.

Подякували: koala1

5

Re: Підрахувати кожну з літер алфавіту

Ви навіть на цьому форумі пошуком не користувались
https://replace.org.ua/topic/11736/

6

Re: Підрахувати кожну з літер алфавіту

Vo_Vik, для неї ці 10 рядків заскладні.

7

Re: Підрахувати кожну з літер алфавіту

Я знаю, того і дав лінк.

8

Re: Підрахувати кожну з літер алфавіту

Не працює все одно помилка навіть коли змінюєш кодування на  CP866.(ASCII)

9

Re: Підрахувати кожну з літер алфавіту

Будь ласка, описуйте помилку конкретно. Комп'ютер здатен видавати різні повідомлення про помилки, а більшість учасників форуму не володіють ані ясновидством, щоб побачити конкретне повідомлення на вашому комп'ютері, ані телепатією, щоб прочитати його з вашого мозку.

10

Re: Підрахувати кожну з літер алфавіту

debug assertion failed

11

Re: Підрахувати кожну з літер алфавіту

noname122 написав:

debug assertion failed

І все? Більше жодного натяку на те місце в коді, причину, щось іще? У вас який компілятор?

12

Re: Підрахувати кожну з літер алфавіту

Visual studio 17,ось така помилка,я могла би скинути скрин але не знаю як
line:42 Expression c>=-1&&c<=255

13

Re: Підрахувати кожну з літер алфавіту

noname122 написав:

Visual studio 17,ось така помилка,я могла би скинути скрин але не знаю як
line:42 Expression c>=-1&&c<=255

https://replace.org.ua/uploads/images/11470/4b4e2b409c6893ec3487dbdafc8934e3.png

Подякували: koala1

14

Re: Підрахувати кожну з літер алфавіту

В мене немає цієї кнопки

15

Re: Підрахувати кожну з літер алфавіту

О, тепер ясно.
Проблема виникла через певну несумісність функцій з <cctype> і <iostream> (бо перші - для C, а другі - для C++, але то вже довга історія). Якщо коротко:
- in.get читає символ (char), який має знак (тобто значення від -128 до 127);
- isupper (і аналогічні функції) приймають int від 0 до 255.
І це треба якось перетворювати. Я гадаю, найкращий вихід тут - перетворити символ на беззнаковий:

unsigned char uc = ch;
if(isupper(uc))...

Але це все не дуже правильно. Особливо якщо цей код для вас заскладний. Вам краще про алгоритм подумати було б.

16

Re: Підрахувати кожну з літер алфавіту

Так в цьому і питання я не можу докумекати як можно реалізувати дану задачу

17

Re: Підрахувати кожну з літер алфавіту

noname122 написав:

Так в цьому і питання я не можу докумекати як можно реалізувати дану задачу

Але чомусь замість того, щоб питати це, ви намагаєтеся то скинути сюди завдання без жодних уточнень, то викласти якийсь код, який не розумієте. А треба вам створити якийсь набір лічильників (найпростіше - масив, початково з нулів, у вашому? коді - map) і для кожного символу, який ви зустрічаєте, збільшувати відповідний елемент цього набору. Сортування потім можна зробити вибіркою (тобто спершу знайти максимальне значення, потім друге і т.д. і записати в новий масив).
Також раджу, як початківцю, взагалі ігнорувати кирилицю. Проблем буде менше.

18

Re: Підрахувати кожну з літер алфавіту

Якщо би можно було ігнорувати,але це завдання таке,я звернулась сюди з цим кодом тому-що не розумію як реалізувати ,я розумію що це має бути масив ,або навіть 2,але як реалізувати,не розумію зовсім(

19

Re: Підрахувати кожну з літер алфавіту

noname122 написав:

Якщо би можно було ігнорувати,але це завдання таке,я звернулась сюди з цим кодом тому-що не розумію як реалізувати ,я розумію що це має бути масив ,або навіть 2,але як реалізувати,не розумію зовсім(

Я не бачу в завданні ані слова про те, що літери мають бути обов'язково українськими.

20

Re: Підрахувати кожну з літер алфавіту

Текст змінюється тобто,спочатку наприклад завдання виконується з англійським текстом,а потім для українського