Ilość znaków na 256. Żeby dużo nie zmieniać w kodzie wystarczy użyć rzutowania na unsigned char (zakres 0 - 256). Nie przejmuj się wynikami u siebie (nie muszą się zgadzać - możesz mieć inne kodowanie znaków):
#include <iostream>
using namespace std;
int main()
{
string napis;
const int ilosc_rozmiar = 256;
int ilosc[ilosc_rozmiar]{}; // zerowanie tablicy (C++11)
int iloscLinii = 0;
while (getline(cin, napis))
{
for (int i = 0; i<napis.length(); i++)
{
ilosc[static_cast<unsigned char>(napis[i])]++; // kod danego znaku wskazuje pozycje - nie trzeba dodatkowo przeszukiwac
}
iloscLinii++;
}
ilosc['\n'] = iloscLinii; // tutaj tak samo dla znaku nowej linii
for (int i = 0; i<ilosc_rozmiar; i++)
{
if (ilosc[i] != 0)
{
cout << i << " " << ilosc[i] << endl;
}
}
}
Możesz zrobić to zadanie troszkę prościej pobierając po jednym znaku do zmiennej typu unsigned char (z cin ustawionym na std::noskipws(żeby białe znaki też były pobierane)).