Ho usato le mappe , sono molto utili.
codice:
#pragma warning(disable:4786)
#include <iostream>
#include <map>
#include <string>
int main()
{
typedef std::map<char,int>	strint_map;
	strint_map				lett_freq;
	strint_map::iterator	lett_freqIt;

int i=0;

//Frase
//std::string str = "Questa qui e' molto grande per vedere come funziona";
std::string str = "ciao a tutti";

//Raccoglie le frequenze
for(i=0;i<str.size();i++)
{
lett_freq[str[i]]++;
//std::cout<<""<<str[i]<<" "<<lett_freq[str[i]]<<std::endl;
}

std::cout<<std::endl;

//Primo tipo di stampa
lett_freqIt = lett_freq.begin();
do{
	std::cout<<"["<<(*lett_freqIt).first<<"] = "<<(*lett_freqIt).second<<std::endl;
}while(++lett_freqIt!=lett_freq.end() );

std::cout<<std::endl;

//Secondo tipo di stampa
for(i=0;i<str.size();i++)
std::cout<<"["<<str[i]<<"]= "<<lett_freq[str[i]]<<std::endl;

return 0;
}
/*Output
[ ] = 2
[a] = 2
[c] = 1
[i] = 2
[o] = 1
[t] = 3
[u] = 1

[c]= 1
[i]= 2
[a]= 2
[o]= 1
[ ]= 2
[a]= 2
[ ]= 2
[t]= 3
[u]= 1
[t]= 3
[t]= 3
[i]= 2
*/
Vedi se ti va bene.