Por suerte el mensaje de error que muestra el compilador es muy explícito:
Cita:
Iniciado por tyrax 28:33: error: invalid cast from type 'std::basic_string<char>' to type 'char'
if ((char)texto1.substr(i-1,1) == alfabeto[j].letra){
El problema es que std::string::substr() devuelve un objeto de tipo std::string, que no se puede "castear" a char.
Resolviendo eso, te vas a encontrar también vas a necesitar revisar la lógica de tu algoritmo.
A modo de ejemplo, y porque puede resultar útil, pongo acá abajo una forma bastante habitual de llevar la cuenta de la cantidad de ocurrencias de elementos en una secuencia. Uso un std::map, que es un "contenedor asociativo" de la biblioteca estándar (http://www.cplusplus.com/reference/map/map/)
Código C++:
Ver original#include <string>
#include <map>
#include <iostream>
int main()
{
std::string texto1;
texto1 = "some text asd 123456";
std::map<char, int> alfabeto;
for(std::size_t i = 0; i<texto1.length(); ++i)
alfabeto[texto1[i]]++;
// muestra cómo ha quedado el alfabeto:
typedef std::map<char, int>::iterator it;
for(it i=alfabeto.begin(); i!=alfabeto.end(); ++i)
std::cout << i->first << " --> " << i->second << '\n';
return 0;
}
Lareto :)