Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Duda con este codigo en C++

Estas en el tema de Duda con este codigo en C++ en el foro de C/C++ en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 11/08/2014, 11:55
 
Fecha de Ingreso: agosto-2014
Ubicación: Albardon San Juan Argentina
Mensajes: 2
Antigüedad: 9 años, 8 meses
Puntos: 0
Duda con este codigo en C++

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!
  #2 (permalink)  
Antiguo 12/08/2014, 06:01
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Duda con este codigo en C++

Buenas,

Tienes un error en alguno de tus 'substr'.

Seguramente no encuentra en la cadena el valor buscado y retorna -1. Posteriormente, sin hacer ninguna comprobacion, haces un substr con dicho valor como valor final te devuelve el out of range.

Lo mejor es que utilices un debugger para que comprendas lo que esta pasando.


Un saludo
  #3 (permalink)  
Antiguo 12/08/2014, 07:38
 
Fecha de Ingreso: agosto-2014
Ubicación: Albardon San Juan Argentina
Mensajes: 2
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Duda con este codigo en C++

Muchisimas gracias me sirvio ya solucione el problema

Etiquetas: int, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:27.