Zmodyfikowałem troche mój przykład. Teraz używa funkcji std::isalpha, zaleta jest taka, że wyniki są zapisane w mapie. To jakie znaki zostaną uznane za alfabetyczme zależy od ustawień locale programu. Można usunąć if'a z std::isalpha aby zliczyć wszystkie znaki. Jest jeszcze wiele wad tego przykładu.
Żeby skompilować ten przykład trzeba włączyć obsługę c++11.
#include <iostream>
#include <string>
#include <stdint.h>
#include <map>
int main()
{
std::cout << "Write something: \n";
std::string user_string{};
//Pobierz całą linię wejścia z terminala
std::getline(std::cin, user_string);
//Mapa unikalnych kluczy i wartości. char jest typem znakowym std::string,
//każdemu unikalnemu kluczowi char w mapie przyporządkowany jest 32bitowy int bez znaku.
std::map<char, std::uint32_t> letters_map{};
//Przeiteruj string, zinkrementuj licznik dla każdego wystąpienia klucza
for(auto str_char : user_string){
if(isalpha(str_char)){
letters_map[str_char]++;
}
}
//Wypisz wynik
std::cout << "User input: " << user_string << '\n';
for(auto map_pair : letters_map){
std::cout << '[' << map_pair.first << "]:" << map_pair.second << '\n';
}
return 0;
}