Hola amigos del foro! he escrito el siguiente codigo en C++:
# include <iostream>
# include <fstream>
# include <map>
using namespace std;
void inserta_idioma(map<string, string>& idioma, string linea){
int inicio = linea.find('!'), mitad = linea.find('-');
string idioma1 = linea.substr(inicio, mitad);
string nombre_oficial = linea.substr(mitad + 1);
idioma[idioma1] = nombre_oficial;
}
void inserta_iso(map<string, string>& iso, string linea) {
int pos = linea.find(','), fin = linea.find('!');
string c_iso = linea.substr(0, pos);
string nombre = linea.substr(pos + 1, fin);
iso[nombre] = c_iso;
}
void abre_fichero(map<string, string>& iso, map<string, string>& idioma, string nombre_fichero){
ifstream f(nombre_fichero.c_str());
string linea;
getline(f, linea);
while(!f.eof()){
inserta_iso(iso, linea);
inserta_idioma(idioma, linea);
getline(f, linea);
}
}
int main() {
map<string, string> iso;
map<string, string> idioma;
string n, pais, nombre_fichero = "iso3166.csv";
abre_fichero(iso, idioma, nombre_fichero);
cout << "Que quieres que muestre? ";
cin >> n;
if (n == "codigo iso") {
cout << "De que pais? ";
cin >> pais;
cout << "El código iso de " << pais << " es " << iso[pais] << endl;
}
if (n == "idioma oficial"){
cout << "De que pais?";
cin >> pais;
map<string, string>::iterator it = idioma.begin();
cout << "El idioma oficial de " << pais << " es " << (*it).first << endl;
}
if (n == "nombre oficial") {
cout << "De que país?";
cin >> pais;
cout << "El nombre oficial de " << pais << " es " << idioma[pais] << endl;
}
}
Al compilar no me da ningún error, pero cuando lo voy a ejecutarlo me da el siguiente error:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr
Abortado
Alguien sabe que puede pasar y como arreglarlo? Desde ya muchas gracias!