Program zliczający ilość poszczególnych liter w zdaniach nie działa poprawnie

0

Witam próbuję zrobić to zadanie: https://szkopul.edu.pl/problemset/problem/y4Yh2h48DQKL4dOEQ8smdTSL/site/?key=statement
i mam z nim problem. Mianowicie program nie zlicza mi dużych liter.
Proszę o wskazanie błędu

#include<bits/stdc++.h>
using namespace std;
int tab[53];
string tekst;
char litera;
int main()
{
    ios_base::sync_with_stdio(0);
    int n,d;
    cin>>n;

    for(int i=1;i<=n;i++)
    {
        cin.ignore();
        getline(cin, tekst);
        d=tekst.length();

        for(int i=0;i<d;i++)
        {

            litera=tekst[i];
            if(litera>64&&litera<91)
            {
                tab[litera-64+26]++;
                //cout<<"test"<<endl;
            }
            if(litera>96&&litera<123)
            {
                tab[litera-96]++;

            }
        }

    }
        char alfabet1='a';
        for(int i=1;i<=27;i++)
        {
            if(tab[i]!=0)
            {
                cout<<alfabet1<<" "<<tab[i]<<"\n";
            }
            alfabet1++;
        }

        char alfabet2='A';
        for(int i=28;i<=53;i++)
        {
            if(tab[i]!=0)
            {
                cout<<alfabet2<<" "<<tab[i]<<"\n";
            }
            alfabet2++;
        }
    return 0;
}
2

Brzydkie to jest. Nie rób tak.
std::unordered_map<char, size_t> jest Ci potrzebne.

0

Co to znaczy bo totalnie nie rozumiem tego

2

http://en.cppreference.com/w/cpp/container/unordered_map

uzycia, przyklady oraz opis. Zapoznaj sie z tym i zastanow sie jak mozna uzyc to w Twoim programie

0

problemem jest złe użycie ignore.
jeśli za liczbą występuje spacja to zrobi się kwas, to samo jeśli windowsowa sekwencja końca linii zostanie źle zinterpretowana.

to powinno iść tak:

std::vector data<int>(256, 0);
int lineCount;
std string line;
getline(std::cin >> lineCount, line);
for(int i=0; i<lineCount; ++i) {
    if (getline(std::cin, line)) {
        for (auto ch : line)
            ++data[(unsigned char)ch];
    }
}
for (int i='a'; i<='z'; ++i)
    if (data[i])
        cout << (char)i << ' ' << data[i] << '\n';
for (int i='A'; i<='Z'; ++i)
    if (data[i])
        cout << (char)i << ' ' << data[i] << '\n';

1 użytkowników online, w tym zalogowanych: 0, gości: 1