hola Eternal muchas gracias por la respuesta, mira entonces coloco mi codigo, lo que quiero en este momento es que las letras que hay en 2 cadenas string sean pasadas a numeros así:
a = 11
b = 12
c = 13
···
Y así sucesivamente hasta la z que seria 36. Lo anterior es lo minimo que debe hacer el programa en este momento, para hacer la conversion de letras a numero, en un arreglo de enteros voy poniendo los numeros en el orden de las letras y quiero ver como ha quedado ese arreglo... y ese es mi problema pues hay ese violacion de acceso.
Para hacer eso tengo pensado 4 archivos :
El archivo que tiene la funcion main
Código:
#include <iostream>
#include <sstream>
#include <stdlib.h>
#include "principal.cpp"
using namespace std;
int main()
{
Principal p = Principal("AAA", "daniel");
cout << p.getCad1().toString() << "\n";
cout << p.getCad1().toString() << "\n";
return 0;
}
La el archivo que tiene la clase Principal que en main se instancia un objeto de esta clase
Código:
#define _principal_cpp_
#include <iostream>
#include "cadena.cpp"
using namespace std;
class Principal
{
public:
Principal();
Principal(string c1, string c2);
Cadena getCad1() { return this->cadena1; }
Cadena getCad2() { return this->cadena2; }
private:
Cadena cadena1; // objeto que tiene una cadena son numeros
Cadena cadena2; // objeto que tiene una cadena son numeros
InfoBase cad1[]; // vector que tendrá objeto infobase y van 2 a Z de c1
InfoBase cad2[]; // vector que tendrá objeto infobase y van 2 a Z de c2
};
// averiguar Bien como se recibe un vector por parametro
/*
void InfoBase::llenarBases()
{
//int Base = 2 ;
//int NumerodeBases = 34 ;
for(int i = 0, base = 2; i <= 34 ; i++, base++)
{
//if (Base <= 36)
// {
this->cad1[i]= InfoBase(Base,conversor(Base));
// }
}
}
*/
Principal::Principal(string c1, string c2)
{
this->cadena1 = Cadena(c1);
this->cadena2 = Cadena(c2);
}
Principal::Principal()
{ }
El archivo que tiene la clase Cadena en en Principal hay dos atributos
Código:
#define _cadena_cpp_
#include <iostream>
#include <ctype.h>
#include <sstream> // para atoi
#include <math.h>
#include "infobase.cpp"
#define length(x) (sizeof(x)/sizeof(x[0])) // pasara el tamaño de un arreglo
using namespace std;
class Cadena
{
public:
Cadena(); // constructor vacio
Cadena(string cad);
int* getCadNum();
string toString();
void letraANumero(string s); // pasa un string a minusculas
string atoi(int num);
int conversor(int Base); // convierte un numero a una base
void llenarBases(InfoBase x[]);
private:
int cadNum[]; // cadena 1 con solo numeros
};
//~ Pasa las letras de la cadena a numeros equivalentes
void Cadena::letraANumero(string s)
{
for(int i = 0; s[i]; i++)
{
s[i] = tolower(s[i]); //<--convierte a minusculas la cadena
switch(s[i])
{
case 'a':
this->cadNum[i] = 11;
break;
} // fin de switch
}
}
//~ Convierte el arreglo de enteros en un decimal dependiendo de la base
int Cadena::conversor(int Base)
{
int valorDecimal = 0 ;
int exp = 0 ;
for (int i =(length(this->cadNum)-1); i>=0 ; i--)
{
valorDecimal =+ this->cadNum[i] * pow(Base,exp);
exp =+ 1 ;
}
return valorDecimal;
}
//~ convierte el arreglo de enteros en una cadena
string Cadena::toString()
{
string rta = "";
for(int i = 0; length(this->cadNum); i++)
{ rta = rta + this->atoi(this->cadNum[i]) + "\n";
}
return rta;
}
//~ Pasa un entero a cadena
string Cadena::atoi(int num)
{
stringstream cadena;
cadena << num;
return cadena.str();
}
int* Cadena::getCadNum()
{
return this->cadNum;
}
Cadena::Cadena(string cad)
{
this->cadNum[cad.size()];
}
Cadena::Cadena()
{ }
La otra es la clase InfoBase que permite guardar un valor en decimal y la base
Código:
#include <iostream>
#define _infobase_cpp_
class InfoBase
{
public:
InfoBase();
InfoBase(int base, int valDeci);
private:
void llenarBases();
int base;
int valDeci;
};
InfoBase::InfoBase()
{ }
InfoBase::InfoBase(int base, int valDeci)
{
this->base = base;
this->valDeci = valDeci;
}
En el main simplente instancio un objeto de Principal y quiero ver lo que hay en unos arreglos.
gracias muchas gracias por los comentarios y gracias por el tiempo..
ciao