Ciao a tutti eccomi di nuovo qui a chiedervi una mano.
Devo scrivere un programma che presa in input una frase, conti il numero di occorrenze di ogni singolo carattere.
Io pensato di agire in questo modo, con un ciclo seleziono un carattere, e con un secondo ciclo scorro la stringa, quando trovo un carattere uguale incremento un contatore e poi elimino il carattere trovato, cosi' da evitare di contarlo di nuovo.
Il sistema per eliminare il carattere dalla stringa e' quello di shiftare di una posizione verso sinistra i caratteri successivi all'occorrenza.
Ho realizzato il codice:

codice:
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;

void count (char* txt, int l);

int main ()
{
	int n = 41;
	char txt[n];
	cout << "Inserire un testo di massimo 40 caratteri" << endl;
	cin.getline(txt, n);
	int l=strlen(txt);
	count(txt, l);
	return 0;
}

void count (char* txt, int l)
{
	for(int i=0; i<l; ++i)
	{
		int cont=1;
		for(int j=i+1; j<l; ++j)
		{
			if(txt[i]==txt[j])
			{
				++cont;
				int tmp1=j+1, tmp2=j;
				while(tmp1<l)
				{
					txt[tmp2]=txt[tmp1];
					++tmp1;
					++tmp2;
				}
				--l;
			}
		}
		cout << "Il carattere ' " << txt[i] << " '" << " compare " << cont << " volte" << endl;
	}
}
e poi ho fatto alcuni test, e qui sono incappato nell'errore, se metto in input la seguente frase:

ciao cara, scusa se non ti ho scritto

ottengo il seguente output:

Il carattere ' c ' compare 4 volte
Il carattere ' i ' compare 3 volte
Il carattere ' a ' compare 4 volte
Il carattere ' o ' compare 4 volte
Il carattere ' ' compare 7 volte
Il carattere ' r ' compare 2 volte
Il carattere ' , ' compare 1 volte
Il carattere ' s ' compare 3 volte
Il carattere ' u ' compare 1 volte
Il carattere ' s ' compare 1 volte
Il carattere ' e ' compare 1 volte
Il carattere ' n ' compare 2 volte
Il carattere ' t ' compare 2 volte
Il carattere ' h ' compare 1 volte
Il carattere ' t ' compare 1 volte

Come si puo' notare alcuni caratteri vengono contati nuovamente.
Non riesco a trovare l'errore, mi potete dare una mano?
Poi mi rendo conto che il codice non e' proprio efficiente, se avete suggerimenti li accetto ben volentieri.
Grazie