Grade 10 · Character stringsCitește în română
Letter frequency
Original: Frecvența literelor
The idea
We count how many times each letter appears, without distinguishing uppercase from lowercase: tolower(c) - 'a' gives the letter's position in the frequency array (0 for a, 25 for z). In alphabetical order, we print only the letters that appear, each with its number of occurrences.
Original description (Romanian)
Numărăm de câte ori apare fiecare literă, fără să facem diferența între literele mari și cele mici: tolower(c) - 'a' dă poziția literei în vectorul de frecvență (0 pentru a, 25 pentru z). Afișăm, în ordine alfabetică, doar literele care apar, fiecare cu numărul de apariții.
- Complexity
- O(L + 26)
- Grade
- Grade 10 (Clasa a X-a)
- Chapter
- Character strings
Examples
Input
Ana are mere
Expected output
a 3 e 3 m 1 n 1 r 2
The code
Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.
/*
* Titlu: Frecvența literelor
* Clasa: 10
* Capitol: Șiruri de caractere
* Descriere: Numărăm de câte ori apare fiecare literă, fără să facem diferența între
* literele mari și cele mici: tolower(c) - 'a' dă poziția literei în
* vectorul de frecvență (0 pentru a, 25 pentru z). Afișăm, în ordine
* alfabetică, doar literele care apar, fiecare cu numărul de apariții.
* Complexitate: O(L + 26)
*
* Exemplu
* Intrare: Ana are mere
* Ieșire:
* a 3
* e 3
* m 1
* n 1
* r 2
*/
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
char s[256];
cin.getline(s, 256);
int fr[26] = {0};
for (int i = 0; s[i] != '\0'; i++)
if (isalpha(s[i]))
fr[tolower(s[i]) - 'a']++;
for (int c = 0; c < 26; c++)
if (fr[c] > 0)
cout << char('a' + c) << ' ' << fr[c] << '\n';
return 0;
}
Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.