1

Тема: підрахувати частоту символів пунктуації

привіт, підкажіть, як можливо порахувати частоту появи знаків пунктуації?
поки вийшло зробити програму на те що вона показує найчастіший символ
але як зробити, щоб воно підрахувало кількість і % співвідношення?
ось умова:
Обчислити частоту розділових знаків (для кожного кількість і%) в рядку за допомогою функцію.
ось що вийшло:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
    int mas[256];
    int i = 0, len, imax = 0;
    while(i < 256)
        mas[i++] = 0;
    char str[300];
    cout << "input string:\n";
    cin.getline(str, 300);
    len = strlen(str);
    i ^= i;
    while(i < len)
    ++mas[(int)str[i++]];
    i ^= i;
    while(i++ < 255)
        if(mas[i] > mas[imax])
            imax = i;
    cout << "symb = " << (char)imax;
    return 0;
}

2

Re: підрахувати частоту символів пунктуації

мабуть, тре порахувати, скільки разів зустрічається потрібний вам знак, а потім поділити його на загальну кількість знаків та домножити на 100
а ви не могли б додати коментарі до вашого коду, аби було зрозуміло, що ви намагались зробити в конкретному рядку?

Говоріть українською! Живіть українською! Відчувайте українською!

3

Re: підрахувати частоту символів пунктуації

i ^= i;

Це код на конкурс обфускації?
Ви не враховуєте, де пунктуація, а де ні.
Ну а про відсотки - вже сказали.

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

4

Re: підрахувати частоту символів пунктуації

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
    int mas[256];
    int count = 0, pcount = 0;
    int i = 0, len, imax = 0;
    while(i < 256) 
    mas[i++] = 0;
    char str[300];
    cout << "input string:\n";
    cin.getline(str, 300);
    len = strlen(str);
    i ^= i;
    while(i < len)
    ++mas[(int)str[i++]];
    i ^= i;
    while(i++ < 255)
        if(mas[i] > mas[imax])
            imax = i;
    for(i = 0; i < 256; ++i)
    {
        if(ispunct(i)) pcount += mas[i];
        count += mas[i];
    }
    cout << "numbers:  " << pcount << endl;;

    cout << "vidsotki: " << (100 * pcount / count) << "%";
}

ось що в мене вийшло
але не підкажете як це можна зробити, використовуючи функції, а не масиви?
ось повне завдання: Ввід-вивід даних та виконання інших окремих логічних дій необхідно реалізувати в окремих функціях. У головній функції необхідно виконувати лише їх виклик. Вихідні дані виводяться на консоль.
Обчислити частоту розділових знаків (для кожного кількість та %).

koala написав:
i ^= i;

Це код на конкурс обфускації?
Ви не враховуєте, де пунктуація, а де ні.
Ну а про відсотки - вже сказали.

5

Re: підрахувати частоту символів пунктуації

olena2355 написав:

як це можна зробити, використовуючи функції, а не масиви?

Ніяк, звісно. Масиви все одно знадобляться; але можна розділити код на шматки і повиносити їх в окремі функції. Якщо не бачите, на які саме - хоча б вирівняйте код, я вам покажу. Навмання функції будуть:
- введення стрічки;
- підрахунок частот в масив;
- обчислення максимума в масиві;
- обчислення суми;
- виведення результатів.
І, якщо ви не зрозуміли сарказму - поясніть, чому ви робите i^=i? Не з якою метою, а чому саме у такий спосіб?

6

Re: підрахувати частоту символів пунктуації

думаю можна взагалі ось так почати

#include <stdio.h>
#include <string.h>
#include <stddef.h>

int main(void)
{
    size_t i;
    size_t cnt = 0;
    char buf[21] = "";

    printf("string: ");
    scanf("%20[^\n]", buf);

    for(i = 0; buf[i]; ++i)
    if(strchr(":;?!,.", buf[i])) ++cnt;

    printf("result: %d\n", cnt);

    return 0;
}
koala написав:
olena2355 написав:

як це можна зробити, використовуючи функції, а не масиви?

Ніяк, звісно. Масиви все одно знадобляться; але можна розділити код на шматки і повиносити їх в окремі функції. Якщо не бачите, на які саме - хоча б вирівняйте код, я вам покажу. Навмання функції будуть:
- введення стрічки;
- підрахунок частот в масив;
- обчислення максимума в масиві;
- обчислення суми;
- виведення результатів.
І, якщо ви не зрозуміли сарказму - поясніть, чому ви робите i^=i? Не з якою метою, а чому саме у такий спосіб?